关于春季休息日

时间:2020-10-26 07:10:11

标签: spring spring-boot hibernate timezone spring-rest

我正在使用Spring Boot休眠模式。我还有一个用于继承DATE类的时间值的类,我在我的实体中使用了这个继承的类。

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

该值到处都应显示为“ dd / MM / yyyy HH:mm:ss”。我该怎么办?

继承的日期类中的构造方法:

public partial class Main : Form
{
    public Main()
    {
        InitializeComponent();
        CheckForIllegalCrossThreadCalls = false;
    }

    private void GetCurLoc()
    {
        while (true)
        {
            PosX.Text = MousePosition.X.ToString();
            PosY.Text = (Int32.Parse(PosYMax.Text) - MousePosition.Y).ToString();
        }
    }

    private void Main_Load(object sender, EventArgs e)
    {
        Thread curLoc = new Thread(new ThreadStart(GetCurLoc));
        curLoc.Start();
    }
}

1 个答案:

答案 0 :(得分:0)

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

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

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

但是有一个缺点,那就是它不支持Java8 Date和Time类。因此,它不会影响它对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中注释特定字段。