web-dev-qa-db-ja.com

RestEasy:タイプ:Java.util.ArrayListのメディアタイプ:application / jsonの応答オブジェクトのMessageBodyWriterが見つかりませんでした

メッセージ:タイプ:Java.util.ArrayListの応答オブジェクトのMessageBodyWriterが見つかりませんでした:メディアタイプ:application/json

説明:サーバーで内部エラーが発生しました(メディアタイプ:application/jsonのタイプ:Java.util.ArrayListの応答オブジェクトの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();
}

クラスパスに安らかなジャクソンプロバイダーがあります。戻り値の型の形式をArrayListからListに変更し、 resteasy response に基づいてGenericEntityでラップしようとしましたが、それでも同じ問題が発生します。

Tomcat7で実行しています。

ありがとう。

9
Balaji Krishnan

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

@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変換中のスタックオーバーフローエラー(休止状態の双方向マッピング)

6
Balaji Krishnan

クラスパスにresteasy-jackson-provider.jarを追加することで、この例外を解決しました。参照 https://bitbucket.org/arcbees/gaestudio/issue/2/need-resteasy-jackson-provider-on

12
Hemanth

ArrayListで使用されるクラスに@XMLRootElementを追加することで、同じ問題が解決されました。

5

この依存関係を追加することで、この問題を解決することができました。

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