5

私の現在のセットアップでは、 jersey docsに記載されているように MOXy で Jersey 2.0 を使用しています。「自動検出機能」に完全に依存しているため、追加の構成や JAXB アノテーションは使用しません。

私の仕事は、サーバー側で文字列の配列を逆シリアル化することです。クライアントは JSON メッセージを送信しています。

["foo","bar"]

サーバー側では、次のメソッド ヘッダーでデシリアライズする必要があります。

@POST
@Path("/stringArray")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response stringArray(List<String> stringList) {
   ...
}

問題: stringList の内容は {null,null} であるため、要素の量は常に正しいのですが、文字列が null に設定されています。

小さなラッパークラスと同じことが機能しています。ここでクラス:

public static class Data {
   public List<String> stringList;
}

methode シグネチャを stringArray(Data data) に変更し、JSON メッセージを次のように変更します。

{"stringList": ["foo","bar"]}

2 つのアプローチの違いは何ですか? また、プレーンな文字列配列を機能させるにはどうすればよいですか?

更新: 説明されている問題は、@Blaise からの回答によって修正されます。しかし、POJO のリストをシリアル化するという密接に関連する問題は、まだ機能しません。メッセージ:

[org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: メディア タイプ = application/json、タイプ = クラス java.util.ArrayList、genericType = クラス java.util.ArrayList の MessageBodyWriter が見つかりません。]

私が見つけた唯一の解決策は、リストを含む小さなラッパー クラスを使用することです...

4

1 に答える 1