11
votes

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.

4
This solution works perfect for meuser1079877
The 3rd post in this thread worked for me using version 3.0.19: stackoverflow.com/questions/14365515/…Sander Postma

4 Answers

13
votes

I solved this exception by adding resteasy-jackson-provider.jar to classpath Refer https://bitbucket.org/arcbees/gaestudio/issue/2/need-resteasy-jackson-provider-on

6
votes

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)

5
votes

Faced same issue resolved by adding @XMLRootElement in class used in ArrayList

0
votes

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>