私は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
私は何を間違えていますか?
私はついに答えを見つけました。追加した
<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ファイルに追加すると、すべて正常に動作します。上記のコードを変更する必要はありませんでした。
次のjarを追加しましたが、うまくいきました
ほんの少しの追加。 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);
...
<!-- 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出力はデフォルトでサポートされています。したがって、依存関係は必要ありません。
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);
同じ問題がありました: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>