Pko

java Error 본문

language/java

java Error

pastko 2021. 12. 11. 04:23

java.util.LinkedHashMap connot be cast to object

restTemplate로 Response 되는 JSON 데이터를 사용하기 편한 형태로 변경하기 위해서는
JSON 데이터를 deserialization하여 pojo 형태의 사용하기 편한 객체화를 해여 한다.

JSONParser json = new JSONParser();
Object obj = json.parse(jsonMsg);
JSONObject jsonObj = (JSONObject) obj;

처음에는 json-simple 라이브러리를 사용하여 deserialization하려 시도 하였지만 아래와 같은 오류가 발생하였다.

java.util.LinkedHashMap connot be cast to object

문제 해결을 위해 구글링을 해본결과 발생 원인은 아래와 같다.

  1. 첫번째 변환되는 객체에 어떤 요소가 있어야 하는지 알지 못했을때 Exception이 발생한다.

  2. 두번째 JSON에서 개체를 역직렬화하려고 하지만 대상 유형 정보가 제공되지 않으면 기본 유형인 LinkedHashMap 사용한다. LinkedHashMap을 사용하여 역직렬화 한뒤 내부 속성 키값의 정보가 일차하지 않았을 때 Exception이 발생한다.

결국 해결방법으로는
Jackson 라이브러리의 ObjectMapper 클래스를 사용하여 deserialization하는 방법을 찾아보았다.

Jackson

jackson은 java에서 사용하는 JSON 데이터 구조를 처리해주는 라이브러리 중 최근들어 가장 많이 사용한다.

ObjectMapper란?

JSON 데이터를 객체로 deserialization하거나 객체를 JSON으로 serialization 할 때 사용하는 Jackson 라이브러리의 클래스이다.
ObjectMapper는 생성 비용이 비싸기 때문에 bean/static으로 처리하는 것이 좋다.

jackson라이브러리에 대해서는 추후 자세하게 공부해봐야 될것 같다.

ResponseDTO response= restTemplate.getForObject(
                url,
                ResponseDTO.class);

ObjectMapper mapper = new ObjectMapper();
UserInfoDTO userInfoDTO = mapper.convertValue(response.getData(), UserInfoDTO.class);

'language > java' 카테고리의 다른 글

Java Error  (0) 2021.12.08