Spring Boot LocalDate字段序列化和反序列化

时间:2015-06-16 14:58:23

标签: json date serialization spring-boot spring-data-rest

在spring boot 1.2.3.RELEASE with fasterxml什么是将LocalDate字段序列化和反序列化为iso日期格式化字符串的正确方法?

我试过了:

spring.jackson.serialization.write-dates-as-timestamps:在application.properties文件中为false,

在项目中包含jackson-datatype-jsr310,然后使用

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")注释

@DateTimeFormat(iso=ISO.DATE)注释,

将Jsr310DateTimeFormatAnnotationFormatterFactory添加为格式化程序:

  

@Override public void addFormatters(FormatterRegistry registry){     registry.addFormatterForFieldAnnotation(新   Jsr310DateTimeFormatAnnotationFormatterFactory()); }

以上都没有帮助。

4 个答案:

答案 0 :(得分:20)

compile ("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
在build.gradle中

然后按照注释帮助:

@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate birthday;

更新:如果您使用的是Spring Boot 2. *,那么依赖关系已经包含在" starters"中。

答案 1 :(得分:4)

实际上,只要在pom.xml中指定依赖项就可以了。

这样,我的所有LocalDate字段都自动使用ISO格式,无需对其进行注释:

<!-- This is enough for LocalDate to be deserialized using ISO format -->
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

在Spring Boot 1.5.7上测试。

答案 2 :(得分:3)

如果要使用自定义Java日期格式化程序,请添加@JsonFormat注释。

@JsonFormat(pattern = "dd/MM/yyyy")
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate birthdate;*

答案 3 :(得分:0)

在我的Spring Boot 2应用程序中

    (反)序列化JSON数据时,在REST控制器中使用
  • @JsonFormat批注。
  • (li)@DateTimeFormat注释在对字符串数据进行反序列化时在其他控制器ModelAttribute中使用。

您可以在同一字段中同时指定两者(如果您在JSON和Thymeleaf模板之间共享DTO,则很有用)

@JsonFormat(pattern = "dd/MM/yyyy") 
@DateTimeFormat(pattern = "dd/MM/yyyy")
private LocalDate birthdate;

等级依赖性:

implementation group: 'org.springframework.boot', name: 'spring-boot-starter-json'

我希望这是Spring Boot 2.x应用程序中自定义日期/时间格式所需的全部配置。


对于Spring Boot 1.x应用,请指定其他注释和依赖项:

@JsonFormat(pattern = "dd/MM/yyyy")
@DateTimeFormat(pattern = "dd/MM/yyyy")
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate birthDate;

// or
@JsonFormat(pattern = "dd/MM/yyyy HH:mm")
@DateTimeFormat(pattern = "dd/MM/yyyy HH:mm")
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime birthDateTime;
implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.9.8'