将java.util.Date转换为json格式

时间:2017-09-25 06:34:27

标签: java json spring-boot jackson resteasy

我必须将我的POJO转换为JSON字符串才能发送到客户端代码。

但是当我执行此操作时,我的POJO中的java.util.Date字段(具有值" 2107-06-05 00:00:00.0")会被翻译为" 1496592000000&# 34;我认为这是时代以来的一段时间。我希望它在Json中更具可读性,可能是在DD / MM / YYYY'格式。

我在Spring Boot应用程序中使用RestEasy控制器,它处理Java对象到JSON的转换。

任何线索出了什么问题?

1 个答案:

答案 0 :(得分:3)

RestEasy通过Jackson支持JSON,因此您可以通过多种方式处理Date序列化。

1。 @JsonFormat注释

如果您想格式化特定字段,只需将@JsonFormat注释添加到您的POJO。

public class TestPojo {

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy")
    public Date testDate;
}

2。杰克逊的房产

如果要全局设置Date序列化格式,则必须调整Jackson配置属性。例如。用于application.properties文件格式。

首先禁用WRITE_DATES_AS_TIMESTAMPS serialization feature

spring.jackson.serialization.write-dates-as-timestamps=false

第二个定义日期格式:

spring.jackson.date-format=dd-MM-yyyy

或者,对于application.yml文件格式:

spring:
  jackson:
    date-format: "dd-MM-yyyy"
    serialization:
      write_dates_as_timestamps: false

3。自定义序列化程序

如果您想完全控制序列化,则必须实现自定义StdSerializer

public class CustomDateSerializer extends StdSerializer<Date> {

    private SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");

    public CustomDateSerializer() {
        this(null);
    }

    public CustomDateSerializer(Class t) {
        super(t);
    }

    @Override
    public void serialize(Date date, JsonGenerator generator, SerializerProvider provider) 
        throws IOException, JsonProcessingException {

        generator.writeString(formatter.format(date));
    }
}

然后将其与@JsonSerialize

一起使用
public class TestPojo {

    @JsonSerialize(using = CustomDateSerializer.class)
    public Date testDate;
}