【发布时间】:2019-05-04 15:01:38
【问题描述】:
我有一个在 Wildfly 9 上运行的 Java 8 上运行良好的项目。
我使用一些 REST 端点将一些 Java 对象序列化为 JSON。这是用 Resteasy 和 @Produces(MediaType.APPLICATION_JSON) 配置的。
我现在正在尝试将项目转换为可在 Wildfly 14 和 Java 11 上运行。
由于某些原因,在之前的版本中,Dateobjects 被导出为数值。在新环境中,日期以文本格式导出(例如2018-12-03T10:05:33.39Z[UTC])。
奇怪的是,有些对象的某些数据属性仍然以数字格式导出,而另一些则以文本格式导出。
我已尝试启用 WRITE_DATES_AS_TIMESTAMPS 功能,但这不会改变结果。
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class JacksonConfig implements ContextResolver<ObjectMapper> {
private final ObjectMapper objectMapper;
public JacksonConfig()
{
objectMapper = new ObjectMapper();
objectMapper.enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
}
@Override
public ObjectMapper getContext(Class<?> objectType)
{
return objectMapper;
}
}
【问题讨论】:
-
不回答你的问题,我更喜欢文本格式。我想数字格式类似于
1543833647428,对人类来说非常不可读。 -
@OleV.V.,我实际上想知道这种格式是否甚至是有效的文本格式。我同意使用文本格式会更好,但它也需要我在应用程序的前端进行更改。
-
2018-12-03T10:05:33.39Z[UTC]几乎 ISO 8601,国际标准。只有[UTC]是Java 特定的添加。如果你能说服 Jackson 忽略这一点,那么让你的前端适应其余部分应该不会太难(或者它可以忽略最后方括号中的任何部分,并对前面的内容感到满意)。
标签: java datetime jackson wildfly resteasy