web-dev-qa-db-ja.com

JacksonをJAX-RS 2.0のJSONプロバイダーとして構成する

JacksonをJAX-RS 2.0 WebサービスのJSONプロバイダーとして使用したい。 JAX-RSの場合、GlassFish 4でJersey 2.0を使用します。JAX-RS1.xでは、追加できます

<init-param>
  <param-name>com.Sun.jersey.api.json.POJOMappingFeature</param-name>
  <param-value>true</param-value>
</init-param>

web.xmlで。 Jersey 2.0を使用してJax-RS 2.0でこれを行うにはどうすればよいですか?このようなアプリケーションクラスを実装します

public class MyRESTExampleApplication extends ResourceConfig {
    public MyRESTExampleApplication() {
         packages("com.carano.fleet4all.restExample");
         register(JacksonFeature.class);
    }
}

これらの行をweb.xmlに追加します。

<init-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>com.example.restExample.MyRESTExampleApplication</param-value>
</init-param>

ただし、リクエストによって例外が発生しますorg.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:MessageBodyWriter not found for media type = application/json、type = class ...

私のpom.xmlは次のようになります

<dependencies>
  <dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
  </dependency>
</dependencies>
13
Tim

実装jar Jackson JAX-RSプロバイダー を取得するだけで、それをクラスパスに追加すれば機能するはずです。バージョン2.xはSPIベースの自動登録を使用するため、web.xmlには何も必要ありません。

21
StaxMan

上記のコードは私のために働いた。 JAX-RS 2.0には自動検出機能があるため、_jersey-media-json-jackson.jar_を検出する必要があります。 Tomcatセットアップを使用しているため、アプリケーションでregister(JacksonFeature.class)を明示的に呼び出す必要がありました。

13
SuperNova1054