11

メッセージ: 次のタイプの応答オブジェクトの MessageBodyWriter が見つかりませんでした: java.util.ArrayList のメディア タイプ: 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を に変更してから、 resteasy responseに基づいてListラップしようとしましたが、それでも同じ問題が発生します。GenericEntity

tomcat7 で実行しています。

ありがとう。

4

4 に答える 4

6

最後にGson library、jsonに依存する代わりにを使用して解決しました。Generic Entity にもラップしませんでした。これが機能するコードです

@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エラー(休止状態の双方向マッピング)

于 2013-10-01T08:36:09.220 に答える