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

时间:2013-09-30 08:35:44

标签: java json resteasy

  

消息:无法为类型的响应对象找到MessageBodyWriter:   java.util.Array媒体类型列表:application / json

     

描述:服务器遇到内部错误(找不到   MessageBodyWriter用于类型的响应对象:java.util.ArrayList of   媒体类型: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 response将其包装在GenericEntity中,但仍然遇到同样的问题。

在tomcat7上运行。

感谢。

4 个答案:

答案 0 :(得分:12)

我通过将resteasy-jackson-provider.jar添加到classpath来解决了这个异常 请参阅https://bitbucket.org/arcbees/gaestudio/issue/2/need-resteasy-jackson-provider-on

答案 1 :(得分: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();
}

必须使用排除策略来避免循环引用。这是以下链接:stackoverflow error during json conversion (hibernate bi-directional mapping)

答案 2 :(得分:5)

通过在ArrayList

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

答案 3 :(得分:0)

通过添加此依赖项,我能够解决此问题。

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