首页 文章

无法从JSON字符串实例化类型[simple type,class org.joda.time.LocalDateTime]的值;没有单字符串构造函数/工厂方法

提问于
浏览
1

从过去的几天开始,我正在努力寻找这个问题的答案 . 我已经在Stack Overflow和Google中搜索了每个主题 . 做了一切建议和建议 . 但没有任何效果 .

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

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

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

实际例外:

2017-06-29 05:33:06,427 | | WARN [RequestCycleExtra](sid :)处理以下异常:org.jboss.resteasy.spi.ReaderException:org.codehaus.jackson.map.JsonMappingException:无法实例化类型[simple type,class org.joda.time]的值 . 来自JSON String的LocalDateTime]; org.jboss.resteasy没有单字符串构造函数/工厂方法(通过引用链:org.comp.app.rest.OrderDTO [“infoMessages”] - > org.comp.app.rest.InfoMessageDTO [“timestamp”]) .client.core.BaseClientResponse.readFrom(BaseClientResponse.java:469)[resteasy-jaxrs-2.3.3.Final.jar:] at 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:] at org.jboss.resteasy.client.core.extractors.BodyEntityExtractor.extractEntity(BodyEntityExtractor.java:62)[resteasy-jaxrs-2.3.3.Final.jar:] at org.jboss.resteasy.client.core.ClientInvoker.invoke (ClientInvoker.java:120)[resteasy-jaxrs-2.3.3.Final.jar:] at org.jboss.resteasy.client.core.ClientProxy.invoke(ClientProxy.java:88)[resteasy-jaxrs-2.3.3 .Final.jar:]

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

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

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

为了找到RC,我也放了Hibernate跟踪 . 数据正在变得充实,甚至JSON都准备好并做出回应 . 但无法跟踪问题的实际位置,因为在服务器(从app-x)响应到客户端(app-y)解析之间抛出此异常 . 但我不是百分百肯定 .

我甚至尝试按照link中的建议注释@JsonSerialize和@JsonDeserialize,以获取Entity和DTO中的时间戳属性以及Stack Overflow中的许多不同帖子 . 但没有任何效果!

带有时间戳注释的代码:

@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

谢谢

1 回答

  • 0

    我得到了同样的错误 . 问题是我发送“creaateTimestamp”:“1529949681949”当我尝试“creaateTimestamp”时:1529949681949它有效 .

    我也在我的pom com.fasterxml.jackson.datatype jackson-datatype-joda 2.6.3中添加了这个依赖项 .

相关问题