私は次のPOJOを持っています:
public class Reservation {
private String name;
private BigDecimal price;
private ArrayList<HashMap<String, Object>> products;
...getters & setters for all fields....
}
そして、この単純な Java Jersey REST リソース:
@POST
@Consumes({MediaType.APPLICATION_JSON})
public String insert(Reservation re) {
//do something here with ReservationEntity
}
次のデータを使用して POST リクエストを実行すると:
{
"name":"michal",
"price":1234.3,
"products":[
{"id":1, "desc":"qwerty"},
{"id":2, "desc":"ytrewq"}
]
}
JSONデータから製品のリストを含む予約クラスのオブジェクトを取得することを期待しています。ただし、名前と価格が設定されているだけのオブジェクトが得られます。ArrayList 製品は空です。
org.codehaus.jackson.map.ObjectMapper を使用して、次のように JSON データを逆シリアル化しようとしました。
String data = "{\"name\":\"micha\".....}";
ObjectMapper om = new ObjectMapper();
Reservation re = om.readValue(data, Reservation.class);
この後、オブジェクトは予想どおり ArrayList プロダクトに 2 つのエントリ (HashMaps) を持っていました。オブジェクトマッパーをこのように使用するのは好きではないので、Jersey だけでそれを行う方法を尋ねています。この問題に関する多くの記事を読みましたが、そのほとんどは次のように web.xml に入れることをお勧めします。
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>org.foobar.rest.services;org.codehaus.jackson.jaxrs</param-value>
</init-param>
これも私にはうまくいきませんでした。web.xml に宣言すらありません
私が使用している: - Glassfish 4.0 - Jersey 2.2
編集: GitHub で非常に単純なプロジェクトでリポジトリを作成しました: Jersey22 MyResource クラスには、パスを持つ 2 つの POST メソッドがあります: /working と /notworking
実用的な例をいただければ幸いです。ありがとうございました。