【问题标题】:Cannot instantiate value of type [simple type, class org.joda.time.LocalDateTime] from JSON String;no single-String constructor/factory method无法从 JSON 字符串实例化类型 [简单类型,类 org.joda.time.LocalDateTime] 的值;没有单字符串构造函数/工厂方法
【发布时间】:2017-06-30 08:37:11
【问题描述】:

从过去几天开始,我一直在努力寻找有关此问题的答案。 我也在 Stack Overflow 和 Google 中搜索了每个主题。 做了所有建议和建议的事情。但没有任何效果。

这是一个常见问题,但有各种不同的原因或根本原因。

所以在这里再次发布我的部分问题。

org.codehaus.jackson.map.JsonMappingException:无法实例化 类型 [简单类型,类 org.joda.time.LocalDateTime] 的值来自 JSON字符串;没有单字符串构造函数/工厂方法

实际异常:

2017-06-29 05:33:06,427 | |警告 [RequestCycleExtra] (sid:) 处理以下异常: org.jboss.resteasy.spi.ReaderException: org.codehaus.jackson.map.JsonMappingException:无法实例化 类型 [简单类型,类 org.joda.time.LocalDateTime] 的值来自 JSON字符串;没有单字符串构造函数/工厂方法(通过 参考链: org.comp.app.rest.OrderDTO["infoMessages"]->org.comp.app.rest.InfoMessageDTO["timestamp"]) 在 org.jboss.resteasy.client.core.BaseClientResponse.readFrom(BaseClientResponse.java:469) [resteasy-jaxrs-2.3.3.Final.jar:] 在 org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:377) [resteasy-jaxrs-2.3.3.Final.jar:] 在 org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:350) [resteasy-jaxrs-2.3.3.Final.jar:] 在 org.jboss.resteasy.client.core.extractors.BodyEntityExtractor.extractEntity(BodyEntityExtractor.java:62) [resteasy-jaxrs-2.3.3.Final.jar:] 在 org.jboss.resteasy.client.core.ClientInvoker.invoke(ClientInvoker.java:120) [resteasy-jaxrs-2.3.3.Final.jar:] 在 org.jboss.resteasy.client.core.ClientProxy.invoke(ClientProxy.java:88) [resteasy-jaxrs-2.3.3.Final.jar:]

infoMessages 是具有时间戳作为属性之一的 InfoMessage 实体的列表 InfoMessageDTO 是 InfoMessage 的 DTO,具有与 DTO 相同的属性,并且还具有时间戳作为属性之一。

InfoMessage 由订单实体中的 Hibernate 映射填充。 InfoMessage Entity 与 Order 相关(onetomany order->infomessage)。

上述操作涉及从应用程序(例如 app-x)调用 Rest 服务 getOrders 到另一个应用程序(例如 app-y)。服务调用涉及从 app-x 数据库中提取请求的订单数据(包括相关实体)并将其显示在 app-y(网络应用程序)上。

为了找到 RC,我还放置了 Hibernate 跟踪。数据正在完善并被填充,甚至 JSON 也已准备好并做出响应。但无法追踪问题的实际位置,因为此异常是在服务器(来自 app-x)响应与客户端(app-y)解析之间引发的。但我不是 100% 确定。

我什至尝试注释 @JsonSerialize@JsonDeserialize,正如 link 中所建议的,用于实体和 DTO 中的时间戳属性以及许多不同的帖子在堆栈溢出中。但没有任何效果!

带有时间戳注释的代码:

@JsonSerialize(using = LocalDateTimeSerializer.class)
public LocalDateTime getTimestamp() {
    LOG.info("InfoMesage.getTimestamp(" + timestamp + ")");
    return timestamp;
}



@JsonDeserialize(using = LocalDateTimeDeserializer.class)
public void setTimestamp(LocalDateTime timestamp) {
    LOG.info("InfoMesage.setTimestamp(" + timestamp + ")");
    this.timestamp = timestamp;
}

LocalDateTimeSerailizer/Deserializer 是扩展jackson-mapper-asl 库的JsonSerializer/Deserializer 的自定义类。

谁能帮助指导我解决这个问题?

Imp 注意:以上两个应用程序是基于 Apache Wicket 的。 JDK 1.7,JBoss 7

谢谢

【问题讨论】:

  • 这个问题不能解决吗?没有人可以帮助我吗?

标签: java json hibernate rest jackson


【解决方案1】:

我遇到了同样的错误。问题是我在尝试“creaateTimestamp”时发送“creaateTimestamp”:“1529949681949”:1529949681949 成功了。

我还在我的 pom 中添加了这个依赖项 com.fasterxml.jackson.datatype 杰克逊数据类型乔达 2.6.3

【讨论】:

  • 将 com.fasterxml.jackson.datatype 从 2.6.2 升级到 2.6.3 真的节省了我的一天!
猜你喜欢
  • 2012-06-06
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 2016-08-25
  • 1970-01-01
  • 2016-10-01
相关资源
最近更新 更多