#java #spring #serialization #annotations #converters
Вопрос:
Я нашел много информации о преобразовании / десериализации LocalDate в LocalDateTime, но не нашел о LocalDateTime в LocalDate, в случае, когда мы используем запрос REST, где ответ содержит значение в формате LocalDateTime, а у DTO, где записано это значение, есть LocalDate.
DTO, которые заполняются из тела ответа
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ContractDto {
@JsonFormat(pattern="yyyy-MM-dd", shape = JsonFormat.Shape.STRING)
@JsonProperty(value = "date")
private LocalDate date;
@JsonFormat(pattern="yyyy-MM-dd", shape = JsonFormat.Shape.STRING)
@JsonProperty(value = "begin_date")
private LocalDate beginDate;
@JsonFormat(pattern="yyyy-MM-dd", shape = JsonFormat.Shape.STRING)
@JsonProperty(value = "end_date")
private LocalDate endDate;
}
Пример того, как выглядит тело ответа (некоторые другие значения были удалены для лучшего чтения)
{
"result": [
{
"date": "2015-11-16T00:00:00 03:00",
"begin_date": "2015-11-16T00:00:00 03:00",
"end_date": "2025-04-30T00:00:00 03:00"
},
]
}
Ошибка, которую я заслужил ;D
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.RestClientException: Error while extracting response for type [ru.tfm.connector.model.dto.ResultDto<ru.tfm.transport.model.dto.connector.ContractDto>] and content type [application/json]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.time.LocalDate` from String "2015-11-16T00:00:00 03:00": Failed to deserialize java.time.LocalDate: (java.time.format.DateTimeParseException) Text '2015-11-16T00:00:00 03:00' could not be parsed, unparsed text found at index 10; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.time.LocalDate` from String "2015-11-16T00:00:00 03:00": Failed to deserialize java.time.LocalDate: (java.time.format.DateTimeParseException) Text '2015-11-16T00:00:00 03:00' could not be parsed, unparsed text found at index 10
at [Source: (PushbackInputStream); line: 6, column: 12] (through reference chain: ru.tfm.connector.model.dto.ResultDto["result"]->java.util.ArrayList[0]->ru.tfm.transport.model.dto.connector.ContractDto["date"])] with root cause
java.time.format.DateTimeParseException: Text '2015-11-16T00:00:00 03:00' could not be parsed, unparsed text found at index 10
Что я пробовал:
- Аннотация @JsonParser
- Аннотация @DateFormat
Что я думаю попробовать:
- Пользовательский конвертер для Джексона?
- Пользовательский десериализатор?
Большое спасибо!
Ответ №1:
Попробуйте использовать эти аннотации:
@JsonSerialize(using = LocalDateSerializer.class)
@JsonFormat(pattern="yyyy-MM-dd")