WebClient 2

[Spring] json deserialize ClassCastException

내부 API 통신 중 T 타입으로 받은 DTO가 해당 DTO 객체가 아닌 LinkedHashMap으로 인식되는 문제를 겪었습니다. 이유를 찾아보니 WebClient의 bodyToMono(Class) 를 통해 역직렬화시 내부적으로 Jakson 라이브러리를 사용하며 json 데이터를 단순히 List로 지정시 "객체"가 어떤것인지 명확하게 알지못하기 때문에 기본 타입인 LinkedHashMap으로 변환하게 됩니다. 구글링에서 흔히 나오는 간단한 해결 방법은 다음과 같았습니다. ObjectMapper mapper = new ObjectMapper(); mapper.convertValue(타겟 클래스, new TypeReference()); 하지만 별도의 후처리가 번거롭다면 문제점 자체가 어떤 타입인지 명확히 알..

개발/Spring 2022.06.16

InvalidDefinitionException 에러

WebClient를 사용하여 크롤링할 데이터를 받는 도중 InvalidDefinitionException 에러가 발생했다. 에러 로그를 읽어보니 기본 생성자가 없다고 나오고 관련 검색을 해봐도 기본 생성자를 생성해봐라! 라는 답변이었다. 이는 불변 객체를 선언하고 싶은 나에게는 맞지 않는 해답이기 때문에 더 찾아보니 @JsonCreateor와 @JsonProperty를 사용하는 방법을 찾았고 다음과 같이 수정 후 정상 작동하는것을 확인했다. 참고 https://www.baeldung.com/jackson-deserialize-immutable-objects Deserialize Immutable Objects with Jackson | Baeldung Learn how to use Jackson to d..

개발/Spring 2022.06.08