9C BLOG
JSON parsing to class 본문
API를 호출하여 JSONArray 데이터를 받아와 파싱하는 부분을 개선하면서 파싱하는 부분을 유틸 함수로 만들어서 쓰면 편할 것 같다는 생각이 들어 함수로 만들어보았다.
개선하면서 작업한 파싱 코드
EduVO eduVO = objectMapper.readerFor(EduVO.class)
.with(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS)
.readValue(jsonArray.get(i).toString());
파싱하면서 에러나던 부분을 ALLOW_UNESCAPED_CONTROL_CHARS 옵션을 주어 해결하였고
파싱된 데이터를 setter를 사용하여 일일이 다 class에 세팅해주던 부분을 @JsonCreator를 사용하여 알아서 매핑되도록 변경하였다.
이런 식으로 API에서 받아올 데이터만 사용하여 생성자를 만들고 생성자에 @JsonCreator 어노테이션을 붙여주고
매핑할 필드에 JSON의 Key 값을 지정해준다.
이렇게 하면 기존에 모든 필드에 set해주던 코드보다 간결하게 한줄로 끝이 나게된다.
여기서 파싱 코드를 다른 API 모듈에도 적용하기 위해 유틸 클래스의 함수로 만들었다.
public static Object parsingJsonToClass(Class<?> tClass, Object jsonObject) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
Object object = objectMapper.readerFor(tClass)
.with(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS)
.readValue(jsonObject.toString());
return object;
}
그리고 기존의 파싱 코드를 해당 함수를 호출하여 리턴 값으로 받아서 쓰도록 변경하였다.
EduVO eduVO = (EduVO) UtilTest.parsingJsonToClass(EduVO.class, jsonArray.get(i).toString());
변경 후 기존 데이터와 비교한 결과 문제없이 똑같이 파싱이 잘 됐다!! 야호!
'STUDY > JAVA' 카테고리의 다른 글
JSON 파싱 오류 해결 (0) | 2023.11.09 |
---|---|
스레드와 프로세스의 차이 (0) | 2023.11.03 |
병렬과 동시성의 차이점을 말해주세요. (0) | 2023.10.30 |
Java Collections (0) | 2023.10.30 |
자바 컨테이너란 무엇인가요? (0) | 2023.07.17 |
Comments