java - JAX-RS 解析日期作为响应
问题描述
我有两个应用程序。第一个应用程序(Spring Boot)向第二个应用程序(JavaEE 7)发送一些信息。在 Java EE 应用程序中,我使用 JAX-RS 客户端,当我尝试从第一个应用程序获取响应时出现异常。
Caused by: javax.json.bind.JsonbException: Unable to deserialize property 'openDate' because of: Error parsing class java.util.Date from value: 2016-07-14T21:00:00.000+0000. Check your @JsonbDateFormat has all time units for class java.util.Date type, or consider using org.eclipse.yasson.YassonProperties#ZERO_TIME_PARSE_DEFAULTING.
at org.eclipse.yasson.internal.serializer.AbstractContainerDeserializer.deserializeInternal(AbstractContainerDeserializer.java:90)
at org.eclipse.yasson.internal.serializer.AbstractContainerDeserializer.deserialize(AbstractContainerDeserializer.java:60)
at org.eclipse.yasson.internal.serializer.CollectionDeserializer.deserializeNext(CollectionDeserializer.java:106)
at org.eclipse.yasson.internal.serializer.AbstractContainerDeserializer.deserializeInternal(AbstractContainerDeserializer.java:84)
at org.eclipse.yasson.internal.serializer.AbstractContainerDeserializer.deserialize(AbstractContainerDeserializer.java:60)
at org.eclipse.yasson.internal.serializer.ObjectDeserializer.deserializeNext(ObjectDeserializer.java:174)
at org.eclipse.yasson.internal.serializer.AbstractContainerDeserializer.deserializeInternal(AbstractContainerDeserializer.java:84)
... 182 more
Caused by: javax.json.bind.JsonbException: Error parsing class java.util.Date from value: 2016-07-14T21:00:00.000+0000. Check your @JsonbDateFormat has all time units for class java.util.Date type, or consider using org.eclipse.yasson.YassonProperties#ZERO_TIME_PARSE_DEFAULTING.
at org.eclipse.yasson.internal.serializer.AbstractDateTimeDeserializer.deserialize(AbstractDateTimeDeserializer.java:71)
at org.eclipse.yasson.internal.serializer.AbstractValueTypeDeserializer.deserialize(AbstractValueTypeDeserializer.java:64)
at org.eclipse.yasson.internal.serializer.ObjectDeserializer.deserializeNext(ObjectDeserializer.java:174)
at org.eclipse.yasson.internal.serializer.AbstractContainerDeserializer.deserializeInternal(AbstractContainerDeserializer.java:84)
... 188 more
Caused by: java.time.format.DateTimeParseException: Text '2016-07-14T21:00:00.000+0000' could not be parsed, unparsed text found at index 23
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1952)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.ZonedDateTime.parse(ZonedDateTime.java:597)
at org.eclipse.yasson.internal.serializer.DateTypeDeserializer.parseWithOrWithoutZone(DateTypeDeserializer.java:83)
at org.eclipse.yasson.internal.serializer.DateTypeDeserializer.parseDefault(DateTypeDeserializer.java:54)
at org.eclipse.yasson.internal.serializer.DateTypeDeserializer.parseDefault(DateTypeDeserializer.java:34)
at org.eclipse.yasson.internal.serializer.AbstractDateTimeDeserializer.deserialize(AbstractDateTimeDeserializer.java:69)
... 191 more
Jax-RS 方法代码:
@Override
public BudgetRecipientsReferenceViewHolderResponse getBudgetRecipients(String language, DefaultRequest request, String sessionKey) {
return ClientBuilder.newClient()
.target(URI.create("http://127.0.0.1:8082/dboreferences/budgetRecipientsReferenceView/getAll"))
.request(MediaType.APPLICATION_JSON)
.header(GlobalConsts.SESSION_TOKEN, sessionKey)
.post(Entity.entity(request, MediaType.APPLICATION_JSON), BudgetRecipientsReferenceViewHolder.class);
}
响应 DTO 类
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class BudgetRecipientsReferenceViewHolder implements Serializable {
private static final long serialVersionUID = -2971479083071002129L;
private Long treasuryBranchCode;
private String budgetRecipientAccount;
private String budgetRecipientName;
private boolean active;
private String budgetRecipientINN;
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd-MM-yyyy hh:mm:ss", timezone = "GMT+3")
private Date openDate;
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd-MM-yyyy hh:mm:ss", timezone = "GMT+3")
private Date closeDate;
}
我在 Spring Boot 应用程序中有相同的类(在另一边)。我尝试使用不同的 Date 反序列化器,删除两边的 @JsonFormat,但它不起作用。
解决方案
推荐阅读
- python - pandas:使用unix时间戳中的列过滤数据
- c++ - 比较 C++ 中的数组
- java - Maven 不与 Spigot 一起运行
- javascript - React - 过滤存储中的对象会导致递归/无限循环
- javascript - 例外:参数 (String,DriveApp.File) 与 DriveApp.File.makeCopy 的方法签名不匹配
- c# - 如何在不使用表单发布的情况下从视图中的 SelectList 获取所选值到控制器?
- java - 指向另一台机器中的 localhost
- discord - 无法读取未定义的属性“添加”,不和谐添加角色
- flutter - 如何在 Flutter Web 中捕获 OAuth2 令牌?
- java - ViewModel 实例 - Activity UI - Android 架构组件