关于 Spring 休息日

About Spring Rest Date

我正在使用 spring 引导,hibernate.I 也有一个 class 用于从 DATE class.I 继承的时间值 class.I 在我的中使用这个继承的 class实体。

数据库中的一列值为 '08 / 01/2020 18:02:22 '。 当我通过邮递员获得此值时,它在其余客户端上显示为“2020-01-08T15:02:22.000 + 0000”。 当 '2020-01-08T15: 02: 22.000 + 0000' 从 rest 客户端发送时,列值显示为 '08 / 01/2020 18:02:22 '。(正确值)

该值在任何地方都应显示为“dd / MM / yyyy HH:mm:ss”。我该怎么做?

构造方法继承日期class:

this.setTime(new SimpleDateFormat(SPRING_DATE_FORMAT_PATTERN).parse(str).getTime())

您正在寻找的是一种在将时间戳值从 Java 对象序列化为 JSON 或 XML.

时修改时间戳值的方法

负责此操作的库是 Jackson,实际执行此操作的对象称为 ObjectMapper。默认情况下,它将以 ISO-8601 表示法序列化。 如果你想改变它的输出方式,你可以直接进入编码定义一个Jackson2ObjectMapperBuilderCustomizer bean(见下文),或者如果你使用 Spring Boot,你可以添加到你的 application.properties 以下条目;

spring.jackson.date-format=dd/MM/yyyy HH:mm:ss

但是有一个缺点,那就是它不支持 Java8 日期和时间 类。所以它不会影响它序列化 java.time.LocalDatejava.time.Localtime 的方式,也不会影响它组合 java.time.LocalDateTime 对象的方式。它仅适用于 java.util.Datejava.util.Calendar.

如果你想要 Java8 支持,那么你唯一的选择就是亲自动手

@Bean
public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
    final String dateFormat = "yyyy-MM-dd";
    final String dateTimeFormat = "yyyy-MM-dd HH:mm:ss";

    return builder -> {
        builder.simpleDateFormat(dateTimeFormat);
        builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(dateFormat)));
        builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateTimeFormat)));
    };
}

正如我最后指出的那样,如果您只想更改某些字段的输出而不是全部,您可以使用 Jackson 的 @com.fasterxml.jackson.annotation.JsonFormat 注释对 DTO 中的特定字段进行注释。