1

I have two apps. The first app (Spring Boot) sends some information to the second app (JavaEE 7). In Java EE app I use JAX-RS client and I get the exception when I try to get a response from the first app.

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 method code:

    @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);
    }

Response DTO class

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;
}

I have the same class in Spring Boot application (on another side). I try to use different Date deserializers, delete @JsonFormat on both sides, but it doesn't work.

  • 2
    I bet a or the problem is your datetime pattern... You error message states you are trying to parse a datetime in 24h format, but your pattern uses uncapitalized `hh` for hours, try to use `HH` instead... Another problem might be the format of the time zone. An something not recommended is to use `java.util.Date` instead of the recommended datetime API `java.time`. – deHaar Mar 30 '20 at 14:55
  • @deHaar, I use LocalDateTime on both sides and it works. Thank you! – artyom.poteshkin98 Mar 30 '20 at 15:20
  • @deHaar, please, add this in answer – artyom.poteshkin98 Mar 30 '20 at 15:22
  • Will do that in a few hours... Glad it helped – deHaar Mar 30 '20 at 15:23
  • 2
    Use pattern `"uuuu-MM-dd'T'HH:mm:ss.SSSXX"` and use `OffsetDateTime` `ZonedDateTime`, not `LocalDateTime` or `java.util.Date` – Andreas Mar 30 '20 at 19:22

0 Answers0