Spring Boot не может десериализовать объект, который содержит OffsetDateTime - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь вызвать конечную точку отдыха, которая возвращает объект pojo, который выглядит следующим образом:

public class Process   {
  @JsonProperty("id")
  private String id = null;

  @JsonProperty("processDefinitionId")
  private String processDefinitionId = null;

  @JsonProperty("businessKey")
  private String businessKey = null;

  @JsonProperty("startedAt")
  private OffsetDateTime startedAt = null;

  @JsonProperty("endedAt")
  private OffsetDateTime endedAt = null;

  @JsonProperty("durationInMs")
  private Integer durationInMs = null;

  @JsonProperty("startActivityDefinitionId")
  private String startActivityDefinitionId = null;

  @JsonProperty("endActivityDefinitionId")
  private String endActivityDefinitionId = null;

  @JsonProperty("startUserId")
  private String startUserId = null;

  @JsonProperty("deleteReason")
  private String deleteReason = null;

  //constructors and setters+getters
}

Вот вызов:

ResponseEntity<Process> responseModel = restTemplate.exchange("http://localhost:8062/processes", HttpMethod.POST, httpEntity, Process.class);

Проблема в том, что яЯ пробовал несколько методов, таких как игнорирование свойств OffsetDateTime или попытка изменить формат этой даты, но он выдаст эту ошибку:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.threeten.bp.OffsetDateTime` (no Creators, like default construct, exist): no String-argument constructor/factory method to deserialize from String value ('2019-10-04T13:20:29.315Z')

Или вернет ноль :( Что было бы хорошим решением длярешить это?

1 Ответ

1 голос
/ 04 октября 2019

В сообщении об ошибке указывается, что он не может создать экземпляр org.threeten.bp.OffsetDateTime. Вам нужно использовать

java.time.offsetdatetime

Тогда в вашей модели вы можете отформатировать его так, как вам нравится, например

@JsonProperty("endedAt")@JsonProperty("endedAt") //this line is not needed when it is the same as the instance variable name
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd@HH:mm:ss.SSSZ")
private OffsetDateTime endedAt;
...