我正在使用Jersey 1.16获得我提供给客户端应用程序的宁静服务。
我正试图从默认的Jersey JSON序列化器转移到基于这个优秀的博客条目使用jackson:
它运作良好,似乎正是我想要的。 但它现在为我的休息服务创建了向后兼容性问题。
例如:我曾经被序列化为"timestamp":"2012-12-25T14:22:24+02:00"
的时间戳字段现已序列化为"timestamp":1356438144000
。
有没有办法选择仅在特定请求上激活基于jackson的新序列化模式(可能使用版本参数我必须决定使用哪种类型的序列化)?
答案 0 :(得分:0)
杰克逊有很多序列化选项。在您的情况下,您需要设置:
private ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
如果您使用的是Jackson 1.x或
private ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
如果你使用Jackson 2.x。
要允许Jersey访问您的自定义ObjectMapper
,您需要创建提供商:
@Provider
public class ObjectMapperProvider implements ContextResolver<ObjectMapper>
{
private final transient ObjectMapper mapper;
@Inject
public ObjectMapperProvider()
{
this.mapper = MyMapper.getMapper();
}
@Override
public ObjectMapper getContext(final Class<?> type)
{
return this.mapper;
}
}
MyMapper.getMapper()
返回您的自定义ObjectMapper
。