[英]Could not find MessageBodyWriter for response object of type: java.util.ArrayList of media type: text/html - in Resteasy
[英]RestEasy: Could not find MessageBodyWriter for response object of type: java.util.ArrayList of media type: application/json
消息:找不到类型的响应对象的MessageBodyWriter:java.util.Array媒体类型列表:application / json
说明:服务器遇到内部错误(找不到类型的响应对象的MessageBodyWriter:媒体类型的java.util.ArrayList:application / json)阻止它完成此请求
@GET
@Path("/{userName}/questions")
//@Produces("application/json")
public Response getUserQuestions(@PathParam("userName") String userName){
UserDAO userDAO = new UserDAO();
List<Question> questions = userDAO.getUserQuestionsByUserName(userName);
GenericEntity<List<Question>> entity = new GenericEntity<List<Question>>(questions){};
return Response.status(200).entity(entity).type(MediaType.APPLICATION_JSON).build();
}
我在classpath中有resteasy jackson提供程序。 尝试将返回类型从ArrayList
更改为List
,然后根据resteasy响应将其包装在GenericEntity
,但仍然遇到相同的问题。
在tomcat7上运行。
谢谢。
我通过在类路径中添加resteasy-jackson-provider.jar解决了这个异常。请参阅https://bitbucket.org/arcbees/gaestudio/issue/2/need-resteasy-jackson-provider-on
最后使用Gson library
解决了它,而不是依赖于json。 也没有包装在通用实体中。 这是有效的代码
@GET
@Path("/{userName}/questions")
public Response getUserQuestions(@PathParam("userName") String userName){
UserDAO userDAO = new UserDAO();
List<Question> questions = userDAO.getQuestionsByUserName(userName);
Gson gson = new GsonBuilder().setExclusionStrategies(new UserQuestionsExclStrat()).create(); //.serializeNulls()
String json = gson.toJson(questions);
System.out.println(json);
return Response.status(200).entity(json).build();
}
不得不使用排除策略来避免循环引用。 这里是链接: json转换期间的stackoverflow错误(休眠双向映射)
通过在ArrayList中使用的类中添加@XMLRootElement来解决相同的问题
通过添加此依赖项,我能够解决此问题。
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.10.1</version>
</dependency>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.