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

Aks*_*kur 2 java json resteasy jackson spring-boot

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

然而,当我这样做时,我的 POJO 中的java.util.Date字段(具有值“ 2107-06-05 00:00:00.0”)被翻译为“ 1496592000000”,我认为这是自纪元以来的一段时间。我希望它在 Json 中更具可读性,可能采用“DD/MM/YYYY”格式。

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

任何线索出了什么问题?

Ana*_*mov 6

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

1.@JsonFormat注解

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

public class TestPojo {

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

2.杰克逊属性

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

第一个禁用WRITE_DATES_AS_TIMESTAMPS 序列化功能

spring.jackson.serialization.write-dates-as-timestamps=false
Run Code Online (Sandbox Code Playgroud)

第二个定义日期格式:

spring.jackson.date-format=dd-MM-yyyy
Run Code Online (Sandbox Code Playgroud)

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

spring:
  jackson:
    date-format: "dd-MM-yyyy"
    serialization:
      write_dates_as_timestamps: false
Run Code Online (Sandbox Code Playgroud)

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));
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将它与@JsonSerialize一起使用

public class TestPojo {

    @JsonSerialize(using = CustomDateSerializer.class)
    public Date testDate;
}
Run Code Online (Sandbox Code Playgroud)