[SPRING] JsonMappingException : java.lang.Integer의 인스턴스를 START_OBJECT 토큰에서 deserialize 할 수 없습니다.
SPRINGJsonMappingException : java.lang.Integer의 인스턴스를 START_OBJECT 토큰에서 deserialize 할 수 없습니다.
Spring Boot를 사용하여 작고 간단한 REST 서비스를 만들고 싶었다. 다음은 REST 서비스 코드입니다.
@Async
@RequestMapping(value = "/getuser", method = POST, consumes = "application/json", produces = "application/json")
public @ResponseBody Record getRecord(@RequestBody Integer userId) {
Record result = null;
// Omitted logic
return result;
}
내가 보낸 JSON 객체는 다음과 같습니다.
{
"userId": 3
}
그리고 여기에 예외가 있습니다 :
해결법
-
==============================
1.분명히 Jackson은 전달 된 JSON을 정수로 역 직렬화 할 수 없습니다. 요청 본문을 통해 사용자의 JSON 표현을 보내려면 다음과 같이 다른 bean에 userId를 캡슐화해야합니다.
분명히 Jackson은 전달 된 JSON을 정수로 역 직렬화 할 수 없습니다. 요청 본문을 통해 사용자의 JSON 표현을 보내려면 다음과 같이 다른 bean에 userId를 캡슐화해야합니다.
public class User { private Integer userId; // getters and setters }
그런 다음 해당 빈을 핸들러 메소드 인수로 사용하십시오.
@RequestMapping(...) public @ResponseBody Record getRecord(@RequestBody User user) { ... }
다른 bean을 생성하는 오버 헤드가 마음에 들지 않으면 경로 변수의 일부로 userId를 전달할 수 있습니다 (예 : / getuser / 15. 그것을하기 위해서 :
@RequestMapping(value = "/getuser/{userId}", method = POST, produces = "application/json") public @ResponseBody Record getRecord(@PathVariable Integer userId) { ... }
요청 본문에 더 이상 JSON을 보내지 않으므로 해당 consumes 속성을 제거해야합니다.
-
==============================
2.아마도 Postman 클라이언트 또는 이와 유사한 JSON 텍스트를 본문에 포함하여 요청을 보내려는 것일 수 있습니다.
아마도 Postman 클라이언트 또는 이와 유사한 JSON 텍스트를 본문에 포함하여 요청을 보내려는 것일 수 있습니다.
{ "userId": 3 }
이것이 정수가 아니기 때문에 잭슨에 의해 비 직렬화 될 수는 없습니다. java.lang Integer의 Integer 객체는 좀 더 복잡합니다.
우편 배달부 요청이 작동하려면 간단히 중괄호 {}없이 넣으십시오.
3
from https://stackoverflow.com/questions/37471005/jsonmappingexception-can-not-deserialize-instance-of-java-lang-integer-out-of-s by cc-by-sa and MIT license