我有一个REST服务端点,它接受以下格式的JSON:
{
"name": "example",
"properties": {
"key1": "val1",
"key2": "val2"
}
}
然后我有这个班级
class Document {
private String name;
private Map<String, String> properties;
... setters/getters
}
我的REST服务方法
logger = Logger.getLogger("logger");
@POST
@Consumes(MediaType.APPLICATION_JSON)
Response addDocument(Document document) {
logger.info(document);
return Response.ok(200).build();
}
但每当我发布JSON时,它都不会解组我的属性。它始终为空。 name属性已正确映射..
我很乐意接受任何帮助/线索。谢谢!
编辑:我没有提到我正在使用glassfish 4.1及其附带的内容。我不会为编组/解组有任何lib依赖。答案 0 :(得分:0)
我刚刚添加了Gson并为JSON创建了自定义实体提供程序。它现在按预期工作,但我会更高兴自己不处理它,但让容器用JAXB配置的任何东西来做。
答案 1 :(得分:0)
你的JSON,JSON将被解析成的Java类,你的JAX-RS资源方法看起来很好:
public class Document {
private String name;
private Map<String, String> properties;
// Getters and setters omitted
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response addDocument(Document document) {
...
return Response.ok(200).build();
}
{{1}}
您可以考虑使用与Jersey集成的JSON提供程序,而不是像answer中提到的那样使用Gson。 Jackson是一个不错的选择,Map
应该可以正常使用。
有关如何将杰克逊与泽西岛一起使用的详细信息,请参阅此answer。