2017-03-16 2 views
1

봄 웹 응용 프로그램 구성을 사용하여 POJO에 Deserialise 쿼리 매개 변수는 잭슨 ObjectMapper스프링 MVC : 잭슨 objectMapper

objectMapper.disable(ADJUST_DATES_TO_CONTEXT_TIME_ZONE) 
    objectMapper.registerModule(new JavaTimeModule()) 

JavaTimeModule 같은 구성이 포함되어 ZonedDateTime의 deserialisation을 처리하기 위해 추가됩니다. ZonedDateTime을 포함하는 POJO를 처리하는 두 개의 끝점이 있습니다. POJO와는 다음과 같이이다 : 엔드 포인트와

class MyRequest { 
    ZonedDateTime from 
    ZonedDateTime to 
} 

와 컨트롤러는 다음과 같습니다

내가 몸

{"from": "2017-03-15T00:00:00Z", "to": "2017-03-16T00:00:00Z"} 

응답은 200이고 deserialisation이 성공적으로 POST/POJO를 보내

@Slf4j 
@RestController 
class MyController { 

    @GetMapping('/pojo') 
    void getPojo(MyRequest myRequest) { 
    log.debug("Request received: $myRequest") 
    } 

    @PostMapping('/pojo') 
    void postPojo(@RequestBody MyRequest myRequest) { 
    log.debug("Request received: $myRequest") 
    } 
} 

. 내가

가 400 잘못된 요청이 GET 요청에 있기 때문에, 오류

Failed to convert from type [java.lang.String] to type [java.time.ZonedDateTime] for value '2017-03-15T00:00:00Z' 

이 메이크업 감각과 수신

GET /pojo?from=2017-03-15T00:00:00Z&to=2017-03-15T00:00:00Z 

, 내가 JSON 때문에 JSON 객체를 전송하고 있지 않다 보내

는 달리, 매퍼가 호출되지 않습니다.

GET 요청에도 objectMapper을 사용할 수 있습니까? 그렇다면 쿼리 매개 변수가 POJO 개체로 변환됩니까? 그런데

, 객체 해결할 수있는 문제에지도 나는 다음과 같은 GET 엔드 ​​포인트에 대한 직렬화 복원 할 수 있다는 것을 알고,하지만 난 쿼리 매개 변수를 objectMapper를 주입하고 변환 GET 및 POST 엔드 포인트

@DateTimeFormat(iso = ISO.DATE_TIME) 
ZonedDateTime from 
@DateTimeFormat(iso = ISO.DATE_TIME) 
ZonedDateTime to 

답변

1

을 위해 동일한 변환기를 사용하려면 문제는

@Slf4j 
@RestController 
class MyController { 

    @Autowired 
    private ObjectMapper objectMapper 

    @GetMapping('/pojo') 
    void getPojo(@RequestParam Map<String, String> allRequestParams) { 
    MyRequest request = objectMapper.convertValue(allRequestParams, MyRequest) 
    log.debug("Request received: $myRequest") 
    } 
...