Java 如果作为URL请求参数发送,则未正确解析ZoneDateTime

Java 如果作为URL请求参数发送,则未正确解析ZoneDateTime,java,spring-boot,datetime,deserialization,json-deserialization,Java,Spring Boot,Datetime,Deserialization,Json Deserialization,我有一个控制器,它接受表示可选请求参数的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 '2

我有一个控制器,它接受表示可选请求参数的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]
我还尝试用
@DateTimeFormat(iso=iso.DATE\u-TIME)
注释
dateTime
字段,但没有任何帮助

其他测试中
ZonedDateTime
字段的序列化成功地格式化了日期/时间,类似于输出中的
yyyy-MM-ddTHH:MM:ssZ

只有POJO中的
ZonedDateTime
字段的反序列化才是我遇到的困难

控制器 波乔 配置 我使用以下两个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();
}
我错过了什么,或者做错了什么


谢谢

这可能不是您的问题,但您应该对参数进行URL编码。作为一个旁路,您的字符串似乎作为<代码>即时< /代码>优于<代码> ZONDATDeTIME/<代码>,因此您可能需要考虑更改类型。@ OLEV-V-V我尝试了URL编码字符串,但收到了相同的错误。因此,我将
ZoneDateTime
更改为
Instant
,但再次收到解析错误。这可能不是您的问题,但您应该对参数进行URL编码。作为一个旁路,您的字符串似乎作为<代码>即时< /代码>优于<代码> ZONDATDeTIME/<代码>,因此您可能需要考虑更改类型。@ OLEV-V-V我尝试了URL编码字符串,但收到了相同的错误。因此,我将
ZoneDateTime
更改为
Instant
,但再次收到解析错误。
public class MySearch {

    private Integer id;
    
    private String name;
    
    private ZonedDateTime dateTime;
}
@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();
}