我有一个Controller,它接受表示可选请求参数的POJO(MySearch
)。当包含id
和/或name
参数时,请求成功。
但是,如果我像这样包含dateTime
参数:
GET /find?dateTime=2019-03-15T22:17:42Z&id=1432&name=Bob
我得到一个错误:
Failed to convert from type [java.lang.String] to type [java.time.ZonedDateTime]
for value '2019-03-15T22:17:42Z'; nested exception is java.lang.IllegalArgumentException:
Parse attempt failed for value [2019-03-15T22:17:42Z]
我还尝试用dateTime
注释@DateTimeFormat(iso = ISO.DATE_TIME)
字段,但这无济于事。
在其他测试中对ZonedDateTime
字段进行序列化可以成功格式化类似于输出中的yyyy-MM-ddTHH:mm:ssZ
的日期/时间。
我遇到的仅仅是POJO中ZonedDateTime
字段的反序列化。
@RestController
public class MyController {
@GetMapping("/find")
public MyResponse find(MySearch search) {
// Do stuff ...
}
}
public class MySearch {
private Integer id;
private String name;
private ZonedDateTime dateTime;
}
我使用以下两个bean配置了ObjectMapper
:
@Bean
public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
return Jackson2ObjectMapperBuilder.json()
.modulesToInstall(new Jdk8Module(), new JavaTimeModule())
.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
}
@Bean
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
return builder.build();
}
我想念什么或做错了什么?
谢谢!