如果作为URL请求参数发送,则ZonedDateTime无法正确解析

时间:2019-04-03 01:52:32

标签: java spring-boot datetime deserialization json-deserialization

我有一个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 ...
    }
}

POJO

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();
}

我想念什么或做错了什么?

谢谢!

0 个答案:

没有答案