简体   繁体   中英

RestEasy: Could not find MessageBodyWriter for response object of type: java.util.ArrayList of media type: application/json

message: Could not find MessageBodyWriter for response object of type: java.util.ArrayList of media type: 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();
}

I have got the resteasy jackson provider in the classpath. Tried changing the return type form ArrayList to List , then wrapping it in GenericEntity based on resteasy response , but still getting the same issue.

Running on tomcat7.

Thanks.

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

finally solved it using the Gson library instead of relying on json. did not wrap in Generic Entity either. Here is the code that works

@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();
}

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)

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

By adding this dependency I was able to solve this issue.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM