我有以下 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 数据中获得带有产品列表的 Reservation 类对象。然而,我得到的是一个只有名称和价格设置的对象。ArrayList 产品为空。
我尝试使用 org.codehaus.jackson.map.ObjectMapper 来反序列化 JSON 数据,如下所示:
String data = "{\"name\":\"micha\".....}";
ObjectMapper om = new ObjectMapper();
Reservation re = om.readValue(data, Reservation.class);
在此之后,对象重新在 ArrayList 产品中有两个条目(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 类中有两个带有路径的 POST 方法:/working 和 /notworking
我会很感激任何工作的例子。谢谢你。