未findJava类的消息正文编写器

我是使用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 

我究竟做错了什么 ?

6 Solutions collect form web for “未findJava类的消息正文编写器”

我终于find了我的答案。 我补充说

 <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子,它为我工作

  • jackson核心ASL-1.9.2.jar
  • jackson映射器-ASL-1.9.2.jar
  • jackson-XC-1.9.2.jar
  • jacksonJAXRS-1.9.2.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); ... 

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输出默认支持。 所以不需要它的依赖。

使用Jersey 1.8,我在创build一个JSON对象并从客户端打到一个REST API时得到了同样的错误。

如果您在服务器端面临问题,那么请确保您正确地将jersey-json.jar包含在classpath中,并在web.xml中正确地映射了正确的init-param,如其他答案中所述。

对于客户端

根据Jersey 1.8文档 ,以下代码片段显示了如何在客户端使用POJO JSON映射function:

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

我遇到了同样的问题:未findJavatypes的消息正文编写器java.lang.String类和MIME媒体typesapplication / json

问题是类javax.ws.rs.ext.MessageBodyWriter是从中获取的

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

与以下同class同学发生碰撞:

  <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>1.19.1</version> </dependency> 
  • 我不了解REST?
  • RESTful服务中的非CRUD操作
  • 对于web服务响应,text / xml和application / xml有什么区别
  • REST API身份validation
  • REST - 支持多种可能的标识符
  • 如何使用Jersey获得完整的REST请求体?
  • 保护REST API / Web服务的最佳实践
  • REST媒体types爆炸
  • REST和RESTful有什么区别?
  • REST中的事务?
  • 如何asynchronous同步CoreData和REST Web服务,同时正确地将任何REST错误传播到UI中