RestEasy:找不到类型的响应对象的MessageBodyWriter:java.util.Array媒体类型列表:application/json

Bal*_*nan 9 java json resteasy

消息:找不到类型的响应对象的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();
}
Run Code Online (Sandbox Code Playgroud)

我在classpath中有resteasy jackson提供程序.尝试将返回类型表单更改ArrayListList,然后GenericEntity根据resteasy响应将其包装,但仍然遇到相同的问题.

在tomcat7上运行.

谢谢.

Hem*_*nth 13

我通过在类路径中添加resteasy-jackson-provider.jar解决了这个异常.请参阅https://bitbucket.org/arcbees/gaestudio/issue/2/need-resteasy-jackson-provider-on


Bal*_*nan 6

最后使用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();
}
Run Code Online (Sandbox Code Playgroud)

不得不使用排除策略来避免循环引用.这里是链接:json转换期间的stackoverflow错误(休眠双向映射)


Sur*_*amy 5

通过在ArrayList中使用的类中添加@XMLRootElement来解决相同的问题