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>