LocalDate 序列化:日期作为数组?
LocalDate Serialization: date as array?
我使用 Java 11 并希望 serialize/deserialize LocalDate/LocalDateTime 作为字符串。
好的。
我添加了依赖项:
<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);
}
Relative.class:
@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;
}
请告诉我,问题是什么以及如何解决。
将 @JsonFormat 注释 添加到您的 birthDate 字段,或者更确切地说是任何日期字段,并且您的 ObjectMapper(Spring 启动或不启动)应该遵循格式,只要因为你对你的类路径有额外的 js310 依赖。
@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate birthDate;
我使用 Java 11 并希望 serialize/deserialize LocalDate/LocalDateTime 作为字符串。 好的。 我添加了依赖项:
<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);
}
Relative.class:
@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;
}
请告诉我,问题是什么以及如何解决。
将 @JsonFormat 注释 添加到您的 birthDate 字段,或者更确切地说是任何日期字段,并且您的 ObjectMapper(Spring 启动或不启动)应该遵循格式,只要因为你对你的类路径有额外的 js310 依赖。
@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate birthDate;