JsonMappingException:java.lang의 인스턴스를 역직렬화할 수 없습니다.START_OBJECT 토큰의 정수가 벗어남
스프링부트를 이용하여 작고 간단한 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
}
제가 받은 예외는 다음과 같습니다.
경고 964 --- [XNIO-2 task-7] .w.s.m.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.DefaultHandlerExceptionResolver : HTTP 메시지 org.springframework.http.converter를 읽지 못했습니다.Http 메시지를 읽을 수 없음예외:문서를 읽을 수 없습니다. java.lang의 인스턴스를 역직렬화할 수 없습니다.[출처: java.io ]에 있는 START_OBJECT 토큰의 정수가 없습니다.PushbackInputStream@12e7333c, line: 1, column: 1], 중첩 예외는 com.fastxml.jackson.databind입니다.JsonMappingException:java.lang의 인스턴스를 역직렬화할 수 없습니다.[출처: java.io ]에 있는 START_OBJECT 토큰의 정수가 없습니다.PushbackInputStream@12e7333c; 줄: 1, 열: 1]
분명히 잭슨은 패스된 JSON을 역직렬화하여Integer요청 본문을 통해 사용자의 JSON 표현을 보내려면 다음을 캡슐화해야 합니다.userId다음과 같은 다른 콩에:
public class User {
private Integer userId;
// getters and setters
}
그런 다음 해당 빈을 핸들러 메서드 인수로 사용합니다.
@RequestMapping(...)
public @ResponseBody Record getRecord(@RequestBody User user) { ... }
만약 당신이 다른 콩을 만드는 것의 간접비가 싫다면, 당신은 통과할 수 있습니다.userId예를 들어 경로 변수의 일부로 사용할 수 있습니다./getuser/15그러기 위해서는:
@RequestMapping(value = "/getuser/{userId}", method = POST, produces = "application/json")
public @ResponseBody Record getRecord(@PathVariable Integer userId) { ... }
요청 본문에서 더 이상 JSON을 보내지 않으므로, 해당 JSON을 제거해야 합니다.consumes기여하다.
아마도 당신은 포스트맨 클라이언트 또는 비슷한 것으로부터 JSON 텍스트가 본문에 포함된 요청을 보내려고 할 것입니다.
{
"userId": 3
}
이것은 정수가 아니기 때문에 잭슨에 의해 역직렬화될 수 없습니다(있는 것처럼 보이지만 그렇지 않습니다).java.lang Integer의 Integer 개체는 조금 더 복잡합니다.
포스트맨 요청이 작동하려면 다음과 같이 간단히 입력합니다(괄호 {} 없음).
3
언급URL : https://stackoverflow.com/questions/37471005/jsonmappingexception-can-not-deserialize-instance-of-java-lang-integer-out-of-s
'codememo' 카테고리의 다른 글
| UI이미지 색상 변경 (0) | 2023.07.02 |
|---|---|
| 내장형 Excel의 이벤트 처리 방법OleObjects 또는 Excel입니다.모양들 (0) | 2023.07.02 |
| Oracle에서 VARCHAR2의 크기가 1바이트로 선언된다는 것은 무엇을 의미합니까? (0) | 2023.06.27 |
| 코덱 구성Spring Boot >= 2.0.1.REASE로 ZoneDateTime을 MongoDB에 저장할 때 예외 발생 (0) | 2023.06.27 |
| UnicodeError: 'charmap' 코덱을 인코딩할 수 없음 - 에 대한 문자 맵, 인쇄 함수 (0) | 2023.06.27 |