【发布时间】:2020-10-22 19:30:00
【问题描述】:
我正在向我的 rest api 发送一个 jsonobject,其中一个字段是日期类型:
{
creationDate: '2017-12-27T11:23:58+01:00'
}
我想解码所以我就这样做:
private final ObjectMapper mapper; //I take the default one
//...
objectMapper.readValue(message.getBody().toJSONString(), MyClass.clazz);
地点:
public class MyClazz{
...
private Instant creationDate;
}
但最后我得到:
com.fasterxml.jackson.databind.exc.InvalidFormatException:无法从字符串“2017-12-27T11:23:58+01:00”反序列化 java.time.Instant 类型的值:无法反序列化 java.time.Instant: (java.time.format.DateTimeParseException) 文本'2017-12-27T11:23:58+01:00'
我检查了我的配置,但我正在导入我需要的每个模块:
@Configuration
public class JacksonConf {
@Bean
public JavaTimeModule javaTimeModule() {
return new JavaTimeModule();
}
@Bean
public Jdk8Module jdk8TimeModule() {
return new Jdk8Module();
}
怎么了?
【问题讨论】:
-
为什么要自己编组一个 JSONObjct?您不应该需要这些模块(它们会被自动检测到),您可以让 Spring 在不使用
JSONObject的情况下进行转换。只需将@RequestBody MyClazz value添加到您的控制器即可。您可能需要在字段上添加JsonFormat注释来指定使用的格式。 -
说来话长....通常我使用pojos,但在这种情况下,我必须支持我不知道字段的通用对象
-
显然你不这样做,因为你正在反序列化到一个对象,所以你知道单向或其他。
-
不,因为我从对象字段中获取类型,对其进行转换,然后将其发送到服务...问题是我要转换的泛型类型没有定义字段跨度>
标签: spring-boot jackson deserialization