1
Spring的web應用程序配置Deserialise查詢參數POJO包含傑克遜ObjectMapper
配置這樣Spring 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
}
和控制器端點是:
@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")
}
}
當我發送POST/POJO與身體
{"from": "2017-03-15T00:00:00Z", "to": "2017-03-16T00:00:00Z"}
的響應是200和deserialisation是成功的。
相反,當我送
GET /pojo?from=2017-03-15T00:00:00Z&to=2017-03-15T00:00:00Z
的400錯誤的請求是GET請求接收到錯誤
Failed to convert from type [java.lang.String] to type [java.time.ZonedDateTime] for value '2017-03-15T00:00:00Z'
這是有意義的,因爲,我不發送JSON,因此JSON對象沒有調用映射器。
還有一種方法可以使用objectMapper
進行GET請求,所以查詢參數被轉換爲POJO對象嗎?
順便說一句,我知道它可以deserialised爲GET端點像下面,但我想用同一轉換爲GET和POST端點
@DateTimeFormat(iso = ISO.DATE_TIME)
ZonedDateTime from
@DateTimeFormat(iso = ISO.DATE_TIME)
ZonedDateTime to