0

クライアントアプリに提供するRESTfulサービスにJersey1.16を使用しています。

この優れたブログエントリに基づいて、デフォルトのJerseyJSONシリアライザーからjacksonを使用するように移行しようとしています。

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

それはうまく機能し、私が望むことをしているようです。ただし、RESTfulサービスの下位互換性の問題が発生します。

例:以前はシリアル化されていたタイムスタンプフィールド"timestamp":"2012-12-25T14:22:24+02:00"が、現在はとしてシリアル化されてい"timestamp":1356438144000ます。

特定の要求に対してのみ新しいジャクソンベースのシリアル化モードをアクティブ化するように選択する方法はありますか(使用するシリアル化のタイプを決定する必要があるバージョンパラメーターを使用する可能性があります)?

4

1 に答える 1

0

ジャクソンには多くのシリアル化オプションがあります。あなたの場合、あなたは設定する必要があります:

private ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);

Jackson1.xを使用している場合または

private ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);

Jackson2.xを使用している場合。

ジャージーがカスタムにアクセスできるよう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 に答える