web-dev-qa-db-ja.com

Java class not foundのメッセージ本文ライター

私はJAX-RSを初めて使用し、jsonオブジェクトを出力するサンプルアプリケーションを作成しました。しかし、例外が発生しています。ここに私のコードがあります:

@Path("/hello")
public class HelloWorldService {

    @GET
    @Path("/query/{artist_id}")
    @Produces("application/json")
    public Data getMsg(@PathParam("artist_id") int artist_id,
                            @QueryParam("from") int from,
                            @QueryParam("to") int to) {
        Data d=new Data();
        d.setName("Mateen");
        d.setRoll(77);
        return d;

    }

}

私のデータは単にPOJOクラスです。

@XmlRootElement
public class Data {
    private int roll;
    private String name;
    public int getRoll() {
        return roll;
    }
    public void setRoll(int roll) {
        this.roll = roll;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

私は例外を受け取ります:

javax.ws.rs.WebApplicationException: 
    com.Sun.jersey.api.MessageException: 
    A message body writer for Java class com.abc.data.Data, 
    and Java type class com.abc.data.Data, 
    and MIME media type application/json was not found

私は何を間違えていますか?

55
user1730789

私はついに答えを見つけました。追加した

<dependency>
    <groupId>com.Sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>1.8</version>
</dependency>

私のpom.xmlファイルに。それから私は追加しました

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

web.xmlファイルに追加すると、すべて正常に動作します。上記のコードを変更する必要はありませんでした。

97
user1730789

次のjarを追加しましたが、うまくいきました

  • jackson-core-asl-1.9.2.jar
  • jackson-mapper-asl-1.9.2.jar
  • jackson-xc-1.9.2.jar
  • jackson-jaxrs-1.9.2.jar
16
Ser Yoga

ほんの少しの追加。 web.xml記述子ファイルを使用しない場合、以下に示すようにプログラムでPOJOMappingFeatireを有効にすることができます

...
final ResourceConfig rc = new PackagesResourceConfig("com.test.resources");
    final Map<String, Object> config = new HashMap<String, Object>();
    config.put("com.Sun.jersey.api.json.POJOMappingFeature", true);
    rc.setPropertiesAndFeatures(config);
...
13
Cyril Deba

Mavenユーザー:次の2つの依存関係だけが必要です。

<!-- For Jersey --> 
<dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <version>2.15</version>
</dependency>

<!-- For JSON --> 
<dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.15</version>    
</dependency>

XML出力はデフォルトでサポートされています。したがって、依存関係は必要ありません。

5
Sorter

Jersey 1.8を使用して、JSONオブジェクトを作成し、クライアント側からREST APIをヒットしたときに同じエラーが発生していました。

サーバー側で問題に直面している場合は、クラスパスにjersey-json.jarを正しく含め、他の回答に記載されているようにweb.xmlに正しいinit-paramをマップしたことを確認してください。

クライアント側

Jersey 1.8 documentation に従って、次のスニペットはクライアント側でPOJO JSONマッピング機能を使用する方法を示しています。

 ClientConfig clientConfig = new DefaultClientConfig();
 clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,Boolean.TRUE);
 Client client = Client.create(clientConfig);
3
Aksh1801

同じ問題がありました:Java type、class Java.lang.String、and MIME media type、application/json、for message body writer is not found

問題は、クラスjavax.ws.rs.ext.MessageBodyWriterが

<dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.22.2</version>
    </dependency>

次からの同じクラスと衝突していました:

    <dependency>
        <groupId>com.Sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.19.1</version>
    </dependency>
0
Nir Sivan