问题描述
说明:服务器遇到内部错误(找不到 类型为:java.util.ArrayList的响应对象的MessageBodyWriter 媒体类型:application/json),导致它无法实现此功能 请求
Description: The server encountered an internal error (Could not find MessageBodyWriter for response object of type: java.util.ArrayList of media type: application/json) that prevented it from fulfilling this request
@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();
}
我在类路径中有resteasy jackson提供程序.尝试将返回类型从ArrayList
更改为List
,然后根据 resteasy响应GenericEntity中>,但仍然遇到相同的问题.
推荐答案
最终使用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错误(休眠双向映射)
Had to use the exclusion strategy to avoid cyclic reference. here is the link for that:stackoverflow error during json conversion (hibernate bi-directional mapping)
这篇关于RestEasy:找不到类型为java.util.Array的响应对象的MessageBodyWriter媒体类型为:application/json的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!