我正在使用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日期格式序列化将解决我的问题,但是请随时指出任何其他解决方案。预先感谢。