0

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

我正在尝试从默认的 Jersey JSON 序列化程序转移到使用基于这个优秀博客条目的杰克逊:

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.

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

4

1 回答 1

0

Jackson 有很多序列化选项。在您的情况下,您需要设置:

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

于 2013-02-08T07:16:21.520 回答