codememo

JsonMappingException:java.lang의 인스턴스를 역직렬화할 수 없습니다.START_OBJECT 토큰의 정수가 벗어남

tipmemo 2023. 7. 2. 20:45
반응형

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

반응형