spring-mvc - 无法从 START_OBJECT token 中反序列化 org.joda.time.DateTime 或 LocalDate 的实例

标签 spring-mvc jackson

v2.1.1,joda module.

我可以在单元测试中使用 objectMapper.readValue(file, pojo .class); 将 json 文件转换为 pojo;

但是,当 Spring RESTTemplate 客户端调用 default json converter要转换包含具有 Joda 类型(DateTime 或 LocalDate)的域对象的 inputStream,它会生成错误:objectMapper.readValue(httpInputMessage.getBody(), javaType)

com.fasterxml.jackson.databind.JsonMappingException:无法反序列化 START_OBJECT token 中的 org.joda.time.DateTime 实例
来源:org.mortbay.jetty.HttpParser$Input@46a09b;行:1,列:752
在 com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164)
在 com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:599)
在 com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:593)
在 com.fasterxml.jackson.datatype.joda.deser.DateTimeDeserializer.deserialize(DateTimeDeserializer.java:51)
在 com.fasterxml.jackson.datatype.joda.deser.DateTimeDeserializer.deserialize(DateTimeDeserializer.java:21)
在 com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:375)
在 com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:559)
在 com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObjectUsingNonDefault(BeanDeserializer.java:393)
在 com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:289)
在 com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
在 com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:226)
在 com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:203)
在 com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:23)
在 com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:375)
在 com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeSetAndReturn(MethodProperty.java:106)
在 com.fasterxml.jackson.databind.deser.BuilderBasedDeserializer.deserializeFromObject(BuilderBasedDeserializer.java:326)
在 com.fasterxml.jackson.databind.deser.BuilderBasedDeserializer.deserialize(BuilderBasedDeserializer.java:143)
在 com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:226)
在 com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:203)
在 com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:23)
在 com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:375)
在 com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeSetAndReturn(MethodProperty.java:106)
在 com.fasterxml.jackson.databind.deser.BuilderBasedDeserializer.deserializeFromObject(BuilderBasedDeserializer.java:

LocalDate 也会出现同样的问题

com.fasterxml.jackson.databind.JsonMappingException:意外 token (START_OBJECT),预期 START_ARRAY:预期 JSON 数组、字符串或数字
来源:org.mortbay.jetty.HttpParser$Input@d297c0;行:1,列:51
在 com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164)
在 com.fasterxml.jackson.databind.DeserializationContext.wrongTokenException(DeserializationContext.java:692)
在 com.fasterxml.jackson.datatype.joda.deser.LocalDateDeserializer.deserialize(LocalDateDeserializer.java:50)
……

为什么调用链在一种情况下传递 START_OBJECT 而在另一种情况下传递 START_ARRAY?

最佳答案

为了解决类似的问题,我做了以下事情,

我从 http://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-joda/2.2.1 下载了 jackson-datatype-joda-2.2.1.jar如果您使用的是 Maven,则依赖项定义也在那里。

然后我为我的应用程序中的每个 LocalDate 字段添加了一个注释,如下所示:

@JsonDeserialize(using=LocalDateDeserializer.class)
private LocalDate releasedDate;

进口看起来像这样:
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.datatype.joda.deser.LocalDateDeserializer;

问题消失了。

希望这可以帮助!

关于spring-mvc - 无法从 START_OBJECT token 中反序列化 org.joda.time.DateTime 或 LocalDate 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13592467/

相关文章:

java - 无法在Maven项目中加载JDBC驱动程序类[com.microsoft.sqlserver.jdbc.SQLServerDriver]

Java:使用 json -SpringBoot 中的 "@class"将 json 反序列化为 rest 模板中的对象

java - 使用 Jackson 将带有下划线的 JSON 反序列化为 Java 中的驼峰式大小写?

java - mule3 服务中的字符集转换

json - 如何将json主体解码到 Camel 中的myclass列表

JSON 提供者 jackson 使用 boolean 类型序列化和反序列化的问题

java - Spring REST 多个 @RequestBody 参数,可能吗?

java - 有没有一种简单的方法可以使用 Spring MVC 和 JSON 更新基于 Spring-Data 的对象

spring - kotlin 和 @Valid Spring 注解

javascript - 如何将参数从ajax传递到spring mvc Controller