jackson - ObjectMapper 정리 [계속..]

Posted on 2021. 7. 23. 10:44
Filed Under Programming/Java

배경: jackson 1.9 이하 버전에서 필요해짐.

출처: 직렬화&역직렬화


public class Coordinates {
    byte red;

    @JsonProperty("r")
    public byte getR() {
      return red;
    }

    @JsonProperty("red")
    public void setRed(byte red) {
      this.red = red;
    }
}
///////
Coordinates obj = new Coordinates();
obj.setRed((byte) 5);

ObjectMapper mapper = new ObjectMapper();
System.out.println("Serialization: " + mapper.writeValueAsString(obj));

Coordinates r = mapper.readValue("{\"red\":25}",Coordinates.class);
System.out.println("Deserialization: " + r.getR());

///////결과:
Serialization: {"r":5}
Deserialization: 25


public static Map<String, Object> objectToMap(Object obj) {
	ObjectMapper objectMapper = new ObjectMapper();
//	objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
//	objectMapper.configure(Feature.AUTO_DETECT_FIELDS, true);
	
    // value=null일때 처리
	objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
		@Override
		public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
			jgen.writeString("");
		}
	});
	
    // key=null일때 처리
	objectMapper.getSerializerProvider().setNullKeySerializer(new JsonSerializer<Object>() {
		  @Override
		  public void serialize(Object value, JsonGenerator jgen, SerializerProvider serializers) throws IOException, JsonProcessingException {
			  jgen.writeFieldName("null");
		  }
	});
	
	@SuppressWarnings("unchecked")
	Map<String, Object> map = objectMapper.convertValue(obj, Map.class);
	return map;
}


 

반응형

[Java] 클래스 속성명으로 객체 속성값 설정하기

Posted on 2021. 7. 19. 13:34
Filed Under Programming/Java


Customer classObj = new Customer();
System.out.println("[Before] classObj.contractId2 = "+classObj.getContractId2());
Field field;
try {
	field = classObj.getClass().getDeclaredField("contractId2");
	field.setAccessible(true);
	field.set(classObj, "설정값");
} catch (Exception e) {
	e.printStackTrace();
	
}
System.out.println("[After] classObj.contractId2 = "+classObj.getContractId2());
반응형

[ORACLE] 시퀀스 값 초기화

Posted on 2021. 6. 15. 16:16
Filed Under DB

DROP SEQUENCE 하고 새로 만들면 쉽겠지만 권한문제로 DROP이 불가할때 사용할 수 있는 방법


--------------------------------------------------------------
--순번 1으로 초기화
DECLARE
  P_CURRVAL_NUM NUMBER;
BEGIN
    -- 1)시퀀스 현재값 얻기(초기화 할거니깐 .NEXTVAL 해버리자)
    SELECT 대상SEQ.NEXTVAL-1 INTO P_CURRVAL_NUM FROM DUAL;
    DBMS_OUTPUT.PUT_LINE('순번초기화 : '||P_CURRVAL_NUM);
    -- 2)증감값을 [-현재값]으로 조정
    EXECUTE IMMEDIATE 'ALTER SEQUENCE 대상SEQ INCREMENT BY -'||P_CURRVAL_NUM;
    -- 3)증감 실행
    SELECT 대상SEQ.NEXTVAL INTO P_CURRVAL_NUM FROM DUAL;
    --4)증감값 원복
    EXECUTE IMMEDIATE 'ALTER SEQUENCE 대상SEQ INCREMENT BY 1';
    
    --결과확인
    SELECT 대상SEQ.CURRVAL INTO P_CURRVAL_NUM FROM DUAL;
    DBMS_OUTPUT.PUT_LINE('-> '||P_CURRVAL_NUM);
END;

DBMS_OUTPUT 출력 창 보기: 메뉴 [보기] > DBMS 출력 > (출력창의)[+]버튼으로 Target DB설정

 

반응형

API요청&응답 받아오기 - HttpURLConnection 사용법

Posted on 2021. 6. 9. 15:42
Filed Under Programming/Java

 


// HttpURLConnection 객체 생성.
HttpURLConnection conn = null;
 
// URL 연결 (웹페이지 URL 연결.)
conn = (HttpURLConnection)url.openConnection();
 
// TimeOut 시간 (서버 접속시 연결 시간)
conn.setConnectTimeout(CONN_TIMEOUT * 1000);
 
// TimeOut 시간 (Read시 연결 시간)
conn.setReadTimeout(READ_TIMEOUT * 1000);
 
// 요청 방식 선택 (GET, POST)
conn.setRequestMethod(GET);
 
// Request Header값 셋팅 setRequestProperty(String key, String value)
conn.setRequestProperty("NAME", "name"); 
conn.setRequestProperty("MDN", "mdn");
conn.setRequestProperty("APPID", "appid");
 
// 서버 Response Data를 xml 형식의 타입으로 요청.
conn.setRequestProperty("Accept", "application/xml");
 
// 서버 Response Data를 JSON 형식의 타입으로 요청.
conn.setRequestProperty("Accept", "application/json");
 
// 타입설정(text/html) 형식으로 전송 (Request Body 전달시 text/html로 서버에 전달.)
conn.setRequestProperty("Content-Type", "text/html");
 
// 타입설정(text/html) 형식으로 전송 (Request Body 전달시 application/xml로 서버에 전달.)
conn.setRequestProperty("Content-Type", "application/xml");
 
// 타입설정(application/json) 형식으로 전송 (Request Body 전달시 application/json로 서버에 전달.)
conn.setRequestProperty("Content-Type", "application/json");
 
// 컨트롤 캐쉬 설정
conn.setRequestProperty("Cache-Control","no-cache");
 
// 타입길이 설정(Request Body 전달시 Data Type의 길이를 정함.)
conn.setRequestProperty("Content-Length", "length")
 
// User-Agent 값 설정
conn.setRequestProperty("User-Agent", "test"); 
 
// OutputStream으로 POST 데이터를 넘겨주겠다는 옵션.
conn.setDoOutput(true);
 
// InputStream으로 서버로 부터 응답을 받겠다는 옵션.
conn.setDoInput(true);
 
// Request Body에 Data를 담기위해 OutputStream 객체를 생성.
OutputStream os = conn.getOutputStream();
 
// Request Body에 Data 셋팅.
os.write(body.getBytes("euc-kr"));
 
// Request Body에 Data 입력.
os.flush();
 
// OutputStream 종료.
os.close();
 
// 실제 서버로 Request 요청 하는 부분. (응답 코드를 받는다. 200 성공, 나머지 에러)
int responseCode = conn.getResponseCode();
 
// 접속해지
conn.disconnect();

출처: [이용범의 잡다한 개발이야기]

 

반응형

[Oracle] 메타데이터 조회(continue..)

Posted on 2021. 5. 11. 10:13
Filed Under DB

..

-- Oracle Version 확인
select * from v$version;

-- 접속계정(현재세션)의 정보 조회
SELECT  SYS_CONTEXT('USERENV', 'IP_ADDRESS') -- 접속한IP(The IP address of the client machine.)
FROM DUAL;

-- 테이블 컬럼 정보
  SELECT t.TABLE_NAME, tc.COMMENTS, t.COLUMN_ID, t.COLUMN_NAME
        ,t.DATA_TYPE
         ||NVL2(t.DATA_LENGTH, '('||TO_CHAR(t.DATA_LENGTH)
                                  ||NVL2(t.DATA_PRECISION, ','||TO_CHAR(t.DATA_PRECISION),'')
                              ||')', '') AS DATA_TYPE
        ,t.NULLABLE, cc.COMMENTS, t.DATA_DEFAULT AS DATA_DEFAULT
        ,A.POSITION AS PK_ORDER
    FROM USER_TAB_COLS t --테이블별 컬럼정보
        ,USER_TAB_COMMENTS tc -- 테이블 코멘트
        ,USER_COL_COMMENTS cc  -- 컬럼 코멘트
        ,(SELECT ct.TABLE_NAME, ct_col.COLUMN_NAME, ct_col.POSITION
            FROM ALL_CONSTRAINTS  ct --제약조건
                ,ALL_CONS_COLUMNS ct_col --제약조건 컬럼
           WHERE ct.CONSTRAINT_TYPE = 'P' 
             AND ct.OWNER = ct_col.OWNER
             AND ct.CONSTRAINT_NAME = ct_col.CONSTRAINT_NAME
         ) A
   WHERE 1=1
     AND tc.TABLE_TYPE = 'TABLE'
     AND t.TABLE_NAME = tc.TABLE_NAME(+)
     AND t.TABLE_NAME = cc.TABLE_NAME(+) AND t.COLUMN_NAME = cc.COLUMN_NAME(+)
     AND t.TABLE_NAME = tc.TABLE_NAME(+)
	 AND t.TABLE_NAME = A.TABLE_NAME(+)
     AND t.COLUMN_NAME = A.COLUMN_NAME(+)
     AND t.TABLE_NAME IN ('대상테이블명')
ORDER BY t.TABLE_NAME, t.COLUMN_ID;


-- 시퀀스 조회
SELECT * FROM USER_SEQUENCES WHERE SEQUENCE_NAME LIKE '%시퀀스명%';

--제약조건 조회 :CONSTRAINT_TYPE=P(PK)/C(제약조건)
SELECT A.TABLE_NAME, A.CONSTRAINT_NAME, A.CONSTRAINT_TYPE
     , B.COLUMN_NAME , B.POSITION
  FROM ALL_CONSTRAINTS  A
     , ALL_CONS_COLUMNS B
 WHERE A.TABLE_NAME      = '테이블명'
   AND A.CONSTRAINT_TYPE = 'P' --P(PrimaryKey)|C(제약조건)|..
   AND A.OWNER           = B.OWNER
   AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
 ORDER BY B.POSITION;
 
--프로시저 내용 검색
SELECT T1.OBJECT_ID, T1.OBJECT_NAME, T1.OBJECT_TYPE, T2.TEXT
  FROM USER_OBJECTS T1
 INNER JOIN USER_SOURCE T2
    ON T1.OBJECT_NAME = T2.NAME
 WHERE T1.OBJECT_TYPE IN ('PROCEDURE')--, 'FUNCTION')
   AND T2.TEXT LIKE '%EXECUTE%'  /* 검색어 */
  ;

--CREATE TABLE 컬럼정의 구문 뽑기
SELECT COLUMN_NAME||' '
    ||DATA_TYPE||CASE DATA_TYPE WHEN 'NUMBER' THEN DECODE(DATA_LENGTH, 22, '', '('||DATA_LENGTH||')')
                     WHEN 'VARCHAR2' THEN '('||DATA_LENGTH||')' END
    ||DECODE(NULLABLE, 'Y', ' NOT NULL ', '')||', '  
    FROM USER_TAB_COLS WHERE TABLE_NAME = '테이블명';
/* REF_VALUE_18 VARCHAR2(100) NOT NULL , 
   REF_VALUE_19 VARCHAR2(100) NOT NULL , 
   REF_VALUE_20 VARCHAR2(100) NOT NULL ,   */
   
--INSERT문 컬럼목록 만들기
SELECT LISTAGG(COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY COLUMN_ID) 
  FROM USER_TAB_COLS WHERE TABLE_NAME = '테이블명';

 

반응형

About

by 쑤기c

반응형