5

Tomee 1.5.2 JAX-RS を Jackson で動作させるために、私は長い間努力してきました。100通りの方法を試したと思います。
これが私の最後の試みです:

conf/system.properties に次を追加しました。

openejb.cxf.jax-rs.providers = org.codehaus.jackson.jaxrs.JacksonJsonProvider, org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider 


Tomeeのlibフォルダーに追加しました:

  • ジャクソン-マッパー-asl-1.9.12.jar
  • jackson-core-asl-1.9.12.jar
  • ジャクソン-jaxrs-1.9.12.jar


クリーンな NetBeans Maven Web プロジェクトに単純な JAX-RS クラスがあります。Mirc は、名前と車を持つ POJO です。

...imports
@Path("")
public class MyJson {
@GET
@Produces(APPLICATION_JSON)
public Object myMeth() {
    return new Mirc("Peter", "BMW");
}

「応答クラス myclass のメッセージ本文ライターが見つかりませんでした」というメッセージが表示され続けます。
私は何を取りこぼしたか?どうすれば動作させることができますか? stackoverflow のすべての投稿を確認しましたが、成功しませんでした。
助けていただければ幸いです。ありがとう。

4

5 に答える 5

9

Tomee さんの多大なサポートのおかげで、ようやく方法がわかりました。というわけで...ここです!

まず、これが最新のTomee 1.6 JAX-RS バージョンでどのように実現されるかを説明することから始めます。このバージョンは間もなく安定版としてリリースされます。ちなみに現在も安定しています。

Maven Java EE 6 Web アプリケーション プロジェクト (NetBeans を使用して生成) があると仮定すると、手順は次のとおり
です。 1. pom.xml に Jackson 依存関係を追加します。

<dependency>
  <groupId>org.codehaus.jackson</groupId>
  <artifactId>jackson-jaxrs</artifactId>
  <version>1.9.13</version>
</dependency>

2. 以下を含む WEB-INF (web.xml のあるフォルダー) に openejb-jar.xml を作成します。

<openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1">
  <pojo-deployment class-name="jaxrs-application">
    <properties>
      cxf.jaxrs.providers = org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider
    </properties>
  </pojo-deployment>
</openejb-jar>

この構成の詳細については、 @rmannibucauからの12
の 編集を参照してください。カスタム jaxrs Application サブクラス (たとえば @ApplicationPath を使用) を使用する場合は、「jaxrs-application」の代わりにこのクラスの修飾名を設定します (つまり、デフォルトのアプリケーション)。 3. Jackson なしでは機能しない JAX-RS リソースを作成します (例: 単純なリスト)。

import java.util.Arrays;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/jackson")
public class Resource {

  @GET
  @Produces({MediaType.APPLICATION_JSON})
  public Object sayHelloJson() {
    return Arrays.asList(new String[]{"Peter", "pan", "Ihihi"});
  }
}

4. Tomee 1.6.0 JAX-RS エディションにデプロイし、アプリを起動します。http://localhost:8080/yourAppPath/jackson このガイドは、NetBeans 7.4 のバージョン 1.6.0 2013.10.24 でテストされています。

最新の Jackson が必要な場合は、以前の依存関係を次のものに置き換えます。

<dependency>
  <groupId>com.fasterxml.jackson.jaxrs</groupId>
  <artifactId>jackson-jaxrs-json-provider</artifactId>
  <version>2.2.3</version>
</dependency>

openejb-jar.xml を変更して、以下を含めます。

cxf.jaxrs.providers = com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider  

Tomee 1.5.2
このバージョンでは、1.6.0 のようにアプリケーション レベルではなく、リソースごとにプロバイダーを指定する必要があります。詳細については、こちらをご覧ください

于 2013-10-29T09:02:56.010 に答える
1

このコードを使用できます:

...imports
@Path("")
public class MyJson {
@GET
@Produces(APPLICATION_JSON)
public String myMeth() {
    ObjectMapper mapper = new ObjectMapper();
    return mapper.writeValueAsString(new Mirc("Peter", "BMW"));
}

これはあなたの問題を解決していますか?

mapper.readValue()文字列をオブジェクトに変換するために使用できます

于 2013-07-23T18:14:38.237 に答える
1

私は TomcatEE の openejb スタンドアロンを使用しており、すべての JSON リクエストに対して Jackson をグローバルに使用したいと考えていました。

サーバーの起動時にこのプロパティを初期コンテキストに追加すると、うまくいきました。これは追跡が困難だったので共有します。おそらく他の誰かを助けることができます。

properties.setProperty("cxf.jaxrs.providers", "com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider");
于 2015-08-07T21:57:26.320 に答える
0

tomee 1.6.0 の lib ディレクトリに gson-2.1 があることに気付きました。したがって、jackson の代わりに gson を使用でき、6 つの jackson 関連の jar (jackson-jaxrs-json-provider と一緒に使用します) に依存しません。GsonProvider (JacksonJaxbJsonProvider の代わり) は、こちらにあります。非常に単純な例でテストしたところ、正しく機能しました。

于 2013-12-16T03:32:23.360 に答える