未找到 Java 类 java.util.ArrayList、Java 类型类 java.util.ArrayList 和 MIME 媒体类型 application/json 的消息正文编写器
Posted
技术标签:
【中文标题】未找到 Java 类 java.util.ArrayList、Java 类型类 java.util.ArrayList 和 MIME 媒体类型 application/json 的消息正文编写器【英文标题】:A message body writer for Java class java.util.ArrayList, and Java type class java.util.ArrayList, and MIME media type application/json was not found 【发布时间】:2016-10-01 07:18:32 【问题描述】:我是使用 jersy 实现 rest api 的新手
我在调用产品服务时收到以下错误。
com.sun.jersey.api.MessageException: A message body writer for Java class java.util.ArrayList, and Java type class java.util.ArrayList, and MIME media type application/json was not found.
这是我的代码:
@GET
@Path("/products")
@Produces(MediaType.APPLICATION_JSON)
public Response productSearch(@QueryParam("name") String name)
List<Product> products = new ArrayList<>();
products.add(new Product("PRDNAME", "PRDCOST", "PRDMODEL"));
return Response.ok( products).build();
我也试过这个:
@GET
@Path("/products")
@Produces(MediaType.APPLICATION_JSON)
public List<Product> productSearch(@QueryParam("name") String name)
List<Product> products = new ArrayList<>();
products.add(new Product("PRDNAME", "PRDCOST", "PRDMODEL"));
return products;
以下是我的环境设置:
雄猫 8, 球衣库:jersey-bundle-1.19.1, 不使用 mavenweb.xml:
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>org.test.rest</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
我也尝试使用以下初始化参数:
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
我尝试返回 GenericEntity,但遇到了同样的问题。
return Response.ok().entity(new GenericEntity<List<Product>>(products) ).build();
我也尝试过使用
jersey-core-1.8.jar jersey-json-1.8.jar jersey-server-1.8.jar而不是 jersey-bundle-1.19.1
我返回字符串时没有任何问题。 我了解,我缺少 json 媒体类型依赖项,但无法弄清楚。
这个错误发生在tomcat服务器上,而客户端明显没有收到响应。
【问题讨论】:
看看这个:***.com/questions/5392413/… @LeTex 我已经尝试过使用问题中提到的 GenericEntity,但我发现 JaxbContentResolver 很难理解。 @jarrod-roberson 你提到的那个,把它标记为重复,是不一样的。这是关于期望 xml 消息的客户端中的类似错误。我的错误发生在服务器无法理解 JSON 和 arraylist 媒体类型并且客户端没有收到响应。 所有A message body writer for Java type ... , was not found.
错误消息的发生原因完全相同,无论具体情况如何。
@jarrod-roberson 提供的链接修复了我不能(或不知道如何)在服务器端使用它的客户端代码。感谢您的时间。 --- 这可能对某人有所帮助 - 虽然我没有解决最初的问题,但我现在设法使用下面的代码完成了我的工作:@GET @Path("/products") @Produces(MediaType.APPLICATION_JSON) public Response productSearch(@QueryParam("name") String name) JSONArray resp_jarray = new JSONArray(); // -- fetch data & add objects to the json array-- return Response.status(200).entity(""+resp_jarray ).build();
【参考方案1】:
也许你忘了添加
@XmlRootElement
模型类定义之上的注释。 对于您的“产品”模型,我想它会类似于
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Product
....
我有一个类似的异常,这为我解决了。
【讨论】:
以上是关于未找到 Java 类 java.util.ArrayList、Java 类型类 java.util.ArrayList 和 MIME 媒体类型 application/json 的消息正文编写器的主要内容,如果未能解决你的问题,请参考以下文章
未找到 Java 类 java.util.ArrayList、Java 类型类 java.util.ArrayList 和 MIME 媒体类型 application/json 的消息正文编写器
未找到类型返回值的转换器:类 java.util.HashMap