【发布时间】: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