关于 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.LocalDate
或 java.time.Localtime
的方式,也不会影响它组合 java.time.LocalDateTime
对象的方式。它仅适用于 java.util.Date
或 java.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 中的特定字段进行注释。
我正在使用 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.LocalDate
或 java.time.Localtime
的方式,也不会影响它组合 java.time.LocalDateTime
对象的方式。它仅适用于 java.util.Date
或 java.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 中的特定字段进行注释。