Notice
Recent Posts
Recent Comments
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
10-10 22:21
Archives
Today
Total
관리 메뉴

Developer_Neo

[ERROR] - nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class ~~ 본문

카테고리 없음

[ERROR] - nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class ~~

_Neo_ 2022. 8. 29. 14:55
반응형

Rest API를 만들고 PostMAN으로 Post요청을 보냈을 때 난 에러이다.

Error

org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class 내가 만든 클래스의 패키지 경로 ]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class 내가 만든 클래스의 패키지 경로 and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: 내가 만든 클래스의 패키지 경로["json으로 반환 되어야할 키값"]->java.util.ArrayList[0])

 

대충 전반적인 상황

 

API요청을 받았을 경우, @RestController로 설정한 Controller는  ResponseEntity형태로 반환을 해도 되기에  ResponseEntity안에 mapper를 이용한 값을 넣어서 반환하는 것이다.

 

하지만 mapper를 이용해 원하던 형태의 반환 값으로 출력을 하지 못하는 경우였다.

만약 mapper로 자동차에 대한 것을 자동차의 옵션이 장착되어있는지 여부로 바꾸어 postman에 출력을 한다고 해보자

안되었던 이유는 자동차의 옵션이 장착되어있는지 여부를 나타내는 클래스에 @Getter를 설정해 주지 않아서 생기는 것이었다. 

 

왜냐하면 ResponseEntity로 반환하는 것으로 설정했다면, Jackson이 Json으로 파싱을 시도해야하는데 이때 위에서 말한 자동차의 옵션이 장착되어있는지을 나타내는 각각의 썬루프, 차선이탈 방지 이러한 기능들이 true인지 fasle인지 가져오기 위해서는 자동차의 옵션이 장착되어있는지을 나타내는 클래스에서 가져와야한다. 이때 안의 썬루프나 차선이탈방지의 멤버변수들이 private로 설정되어있다면, 가져올 수 있는 방법은 Get메소드를 이용해서 가져와야한다. 따라서 private로 멤버변수들을 설정했다면, @Getter 어노테이션을 해당 클래스에 추가를 해주어야 Jackson이 Json으로 파싱이 가능하다.

반응형
Comments