如何更改杰克逊日期格式或正确处理日期数据?

时间:2018-12-17 19:49:53

标签: java jackson jersey-2.0

我正在使用Jersey和Jackson创建一个REST JAX-RS,并在前端使用Typescript创建一个JavaScript Framework。

我的问题是我无法保持正确的 Date 信息,因此在请求返回时,它不会转换为Typescript Date类型。

场景:

在前端,我在请求中发送new Date()的值。这是JSON属性中的一个值:started: "2018-12-17T02:00:00.000Z"

这是我的Java属性:private ZonedDateTime started;(我也尝试使用旧的util.Date类型,结果相同)。保存到我的PosgreSQL TIMESTAMP列中的值为:"2018-12-17 00:00:00"

现在,在Jackson所创建的响应中,该位令人困惑,该字段和值是:"started":"2018-12-17T00:00:00-02:00[America/Sao_Paulo]"。这是一个不会转换为Typescript Date类型的值,new Date(started)也不起作用。我需要剪掉括号之间的任何内容。

到目前为止我尝试过的事情:

1)由于JS生成的日期末尾的LocalDateTime,试图忽略时区并在Java属性中使用Z会导致解析错误。

2)我尝试将@JsonFormat()添加到getter或字段中,但不起作用,响应值是相同的。

3)创建以下Jackson Provider并进行注册:

public class CustomJacksonProvider extends JacksonJaxbJsonProvider implements ContextResolver<ObjectMapper> {

    private static final ObjectMapper MAPPER = new ObjectMapper();

    static {
        MAPPER.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"));
    }

    public CustomJacksonProvider() {
        super();
        setMapper(MAPPER);
    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return MAPPER;
    }
}

同样无济于事。

我目前的解决方法是:我将所有内容保存为字符串,并在需要正确的类型或操作时从中创建一个新的日期。

我认为更改Jackson日期格式序列化将解决我的问题,但是请随时指出任何其他解决方案。预先感谢。

0 个答案:

没有答案