簡體   English   中英

RestEasy:找不到類型的響應對象的MessageBodyWriter:java.util.Array媒體類型列表:application / json

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

消息:找不到類型的響應對象的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();
}

我在classpath中有resteasy jackson提供程序。 嘗試將返回類型從ArrayList更改為List ,然后根據resteasy響應將其包裝在GenericEntity ,但仍然遇到相同的問題。

在tomcat7上運行。

謝謝。

我通過在類路徑中添加resteasy-jackson-provider.jar解決了這個異常。請參閱https://bitbucket.org/arcbees/gaestudio/issue/2/need-resteasy-jackson-provider-on

最后使用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();
}

不得不使用排除策略來避免循環引用。 這里是鏈接: json轉換期間的stackoverflow錯誤(休眠雙向映射)

通過在ArrayList中使用的類中添加@XMLRootElement來解決相同的問題

通過添加此依賴項,我能夠解決此問題。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM