迁移到使用杰克逊与泽西时的向后兼容性问题

时间:2013-02-07 21:36:25

标签: json serialization jersey jackson backwards-compatibility

我正在使用Jersey 1.16获得我提供给客户端应用程序的宁静服务。

我正试图从默认的Jersey JSON序列化器转移到基于这个优秀的博客条目使用jackson:

http://crazytechbuddy.blogspot.co.il/2012/06/making-jersey-to-use-jackson-instead-of.html?showComment=1360271858862#c6459334450173933715

它运作良好,似乎正是我想要的。 但它现在为我的休息服务创建了向后兼容性问题。

例如:我曾经被序列化为"timestamp":"2012-12-25T14:22:24+02:00"的时间戳字段现已序列化为"timestamp":1356438144000

有没有办法选择仅在特定请求上激活基于jackson的新序列化模式(可能使用版本参数我必须决定使用哪种类型的序列化)?

1 个答案:

答案 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