1

GenericEntityを使用して、putメソッドを使用してジェネリックリストをサーブレットに送信しようとしています。一般的なリストを要求する例をたくさん見ましたが、どれもそれを入れていません。

したがって、私のサーバーのコードは次のとおりです。

@PUT
@Produces(MediaType.TEXT_HTML)
public String doPutHtml(GenericType<List<SystemInfo>> systemInfoList) {
    System.out.println(systemInfoList.toString());
    return "OK";
}

そして、putリクエストを送信するクライアントのコード:

WebResource ws;
Configuration conf = ConfigurationFactory.getConfigurationFactory()
            .getConfiguration();

Client client = Client.create();
ws = client.resource("http://" + conf.getDatacenterURL() + ":"+ conf.getDatacenterPort() + "/services/systemInfo");
GenericEntity entity = new GenericEntity<List<SystemInfo>>(systemInfoList) {};
String response = ws.accept(MediaType.TEXT_HTML).type(MediaType.APPLICATION_XML).put(String.class, entity);

クライアントコードを実行すると、次の例外が発生します。

com.sun.jersey.api.client.ClientHandlerException: com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, class java.util.ArrayList, and MIME media type, application/octet-stream, was not found

だから私の質問は、この方法で一般的なリストを送信することは可能ですか?これが不可能な場合、代替手段はありますか?

4

2 に答える 2

2

さまざまな組み合わせでまったく同じエラーが発生していました。私が見つけた答えは非常に単純なようです。

上記のクライアントのセットアップと呼び出しの例は正しいです。具体的には...

GenericEntity entity = new GenericEntity<List<SystemInfo>>(systemInfoList) {};
String response = 
ws.accept(MediaType.TEXT_HTML).type(MediaType.APPLICATION_XML).put(String.class, entity);

GenericEntityは、リストからRESTfulサービスへの移行を処理します。サービスには適切なリストのみが必要です。

@PUT
@Produces(MediaType.TEXT_HTML)
public String doPutHtml(List<SystemInfo> systemInfoList) {
    System.out.println(systemInfoList.toString());
    return "OK";
}
于 2014-10-01T22:32:41.240 に答える
0

この問題は、オブジェクトのマーシャリングとマーシャリング中に発生します。同じ問題について説明している同様のスレッドがここにありますが、これはJAXBに関連しています。また、リストオブジェクトをシリアル化しようとし、同じ問題に直面します。問題を分析すると、ここでも同じ手法を簡単に実装できます。

JAXBを使用してList<String>をアンマーシャリング/マーシャリングします

これがお役に立てば幸いです。

于 2012-05-02T07:34:44.360 に答える