Spring Data JPA – 用于json序列化的ZonedDateTime格式

我对ZonedDateTime的json序列化有问题。 当转换为json时,它产生了一个巨大的对象,我不希望每次都传输所有数据。 所以我试着将其格式化为ISO,但它不起作用。 我怎样才能让它格式化?

这是我的实体类:

 @MappedSuperclass public abstract class AuditBase { @Id @GeneratedValue private Long id; @CreatedDate private ZonedDateTime createdDate; @LastModifiedDate private ZonedDateTime lastModifiedDate; @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) public ZonedDateTime getLastModifiedDate() { return lastModifiedDate; } public void setLastModifiedDate(ZonedDateTime lastModifiedDate) { this.lastModifiedDate = lastModifiedDate; } @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) public ZonedDateTime getCreatedDate() { return createdDate; } public void setCreatedDate(ZonedDateTime createdDate) { this.createdDate = createdDate; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } @PrePersist public void prePersist() { this.createdDate = ZonedDateTime.now(); this.lastModifiedDate = ZonedDateTime.now(); } @PreUpdate public void preUpdate() { this.lastModifiedDate = ZonedDateTime.now(); } } 

我猜你正在使用Jackson进行json序列化,Jackson现在有一个用于Java 8新日期时间API的模块, https://github.com/FasterXML/jackson-datatype-jsr310 。

将此依赖项添加到pom.xml中

  com.fasterxml.jackson.datatype jackson-datatype-jsr310 2.6.0  

这是它的用法:

  public static void main(String[] args) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule()); System.out.println(objectMapper.writeValueAsString(new Entity())); } static class Entity { ZonedDateTime time = ZonedDateTime.now(); @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ") public ZonedDateTime getTime() { return time; } } 

输出是:

 {"time":"2015-07-25T23:09:01.795+0700"} 

注意:如果您的Jackson版本是2.4.x使用

 objectMapper.registerModule(new JSR310Module()); 

希望这可以帮助!

以上答案有效,但如果您不想触摸现有的实体类,以下设置将适用于ZonedDateTime

  public static ObjectMapper getMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new JavaTimeModule()); return mapper.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, false) .configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS,false) .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false) .configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false) .setVisibility(mapper.getSerializationConfig() .getDefaultVisibilityChecker() .withFieldVisibility(JsonAutoDetect.Visibility.ANY) .withGetterVisibility(JsonAutoDetect.Visibility.NONE) .withSetterVisibility(JsonAutoDetect.Visibility.NONE) .withCreatorVisibility(JsonAutoDetect.Visibility.NONE)); } 

图书馆:

  com.fasterxml.jackson.dataformat jackson-dataformat-csv ${jackson.dataformat.csv.version}   com.fasterxml.jackson.datatype jackson-datatype-jsr310