当前位置: 首页 > 知识库问答 >
问题:

RestEasy:找不到MessageBodyWriter的响应对象类型:java.util.ArrayList的媒体类型:应用程序/json

陈胤
2023-03-14

消息:找不到类型为java的响应对象的MessageBodyWriter。util。媒体类型的数组列表:application/json

描述:服务器遇到内部错误(找不到类型为java.util.ArrayList,媒体类型为application/json的响应对象的MessageBodyWriter),导致其无法满足此请求

@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,但仍然遇到相同的问题。

在tomcat7上运行。

谢谢

共有3个答案

仲孙诚
2023-03-14

在ArrayList中使用的类中添加@XMLRootElement解决了同样的问题

越文康
2023-03-14

最终解决了这个问题,使用的是Gson库,而不是依赖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错误(hibernate双向映射)

乜胜泫
2023-03-14

我通过添加resteasy jackson提供者解决了这个异常。jar到类路径引用https://bitbucket.org/arcbees/gaestudio/issue/2/need-resteasy-jackson-provider-on

 类似资料: