LocalDate Сериализация: дата как массив? - PullRequest
1 голос
/ 30 марта 2020

Я использую Java 11 и хочу сериализовать / десериализовать LocalDate / LocalDateTime как String. Ладно. Я добавил зависимость:

    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
        <version>${jackson.version}</version>
    </dependency>

и модуль:

@Bean
public ObjectMapper objectMapper() {
    return new ObjectMapper()
            .registerModule(new JavaTimeModule())
            .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
            .enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
}

Когда я отправляю дату в мое приложение, оно корректно десериализуется:

{"profileId":12608,"birthDate":"2008-03-20","relativeType":"SON","cohabitants":true}

Когда я использую objectMapper как и bean-компонент, он также корректно сериализуется:

{"code":"SUCCESS","id":868,"profileId":12608,"birthDate":"2008-03-20","relativeType":"SON","cohabitants":true}

Но когда он сериализуется с контроллером, он сериализуется как массив:

{"code":"SUCCESS","id":868,"profileId":12608,"birthDate":[2008,3,20],"relativeType":"SON","cohabitants":true}

Проблема заключается в десериализации даты в теле на контроллере. Контроллер:

@PostMapping
public Relative create(@Validated(Validation.Create.class) @RequestBody Relative relative) {
    return service.create(relative);
}

Относительный.класс:

@Getter
@Setter
@ToString(callSuper = true)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Relative extends MortgageResponse {

    @Null(groups = Validation.Create.class)
    @NotNull(groups = Validation.Update.class)
    private Long id;

    @NotNull
    private Long profileId;

    private LocalDate birthDate;
    private RelativeType relativeType;
    private Boolean cohabitants;
}

Пожалуйста, посоветуйте мне, в чем проблема и как ее исправить.

1 Ответ

2 голосов
/ 30 марта 2020

Добавьте аннотацию @ JsonFormat в свое поле birthDate, или, вернее, любое поле даты, и ваш ObjectMapper (Spring Boot или нет) должен учитывать форматирование, если у вас есть дополнительная зависимость js310 от вашего classpath .

@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate birthDate;
...