Java Spring数据JPA-json序列化的ZonedDateTime格式
我对Java Spring数据JPA-json序列化的ZonedDateTime格式,java,json,spring,jpa,spring-data-jpa,Java,Json,Spring,Jpa,Spring Data Jpa,我对zoneDateTime的json序列化有问题。当转换成json时,它会产生一个巨大的对象,我不希望每次都传输所有的数据。所以我试着将它格式化为ISO,但它不起作用。我怎样才能把它格式化 这是我的实体类: @MappedSuperclass public abstract class AuditBase { @Id @GeneratedValue private Long id; @CreatedDate private ZonedDateTime
zoneDateTime
的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现在有了一个用于Java8的新日期时间API模块 将此依赖项添加到pom.xml中
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.6.0</version>
</dependency>
输出为:
{"time":"2015-07-25T23:09:01.795+0700"}
注意:如果您的Jackson版本是2.4.x,请使用
objectMapper.registerModule(new JSR310Module());
希望这有帮助 以上答案有效,但如果您不想接触现有的实体类,以下设置将与
ZoneDateTime一起使用:
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));
}
图书馆:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-csv</artifactId>
<version>${jackson.dataformat.csv.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
com.fasterxml.jackson.dataformat
jackson数据格式csv
${jackson.dataformat.csv.version}
com.fasterxml.jackson.datatype
jackson-datatype-jsr310
我解决了将以下属性设置为application.yml
的问题
spring:
杰克逊:
序列化:
将日期写入时间戳:false
我使用springboot:2.3.8.RELEASE
和dependency management:1.0.10.RELEASE
关于更详细的信息我有一件非常奇怪的事情:{“时间”:1473923145.038000000}。有了您的解决方案,我现在有了所需的{“时间”:“2016-09-15T07:57:26.602+0000”。对于我来说,使用registerModule已经足够了。我不必触摸实体。谢谢当有人从pom文件中发布了5行XML时,我总是感到很冷,Gralde for the win;)@克劳斯格罗恩贝克:很公平,格雷德尔看起来更简洁,但有时我们只需要让它工作。@JsonFormat(shape=JsonFormat.shape.STRING,pattern=“yyyy-MM-dd'HH:MM:ss.SSSXXX”,timezone=“UTC”)=>2019-10-16T08:23:51.817Z
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-csv</artifactId>
<version>${jackson.dataformat.csv.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>