[英]JAX-RS unmarshal JSON sub property to hash map
我有一个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及其附带的内容。 我对marshal / unmarshal没有任何lib依赖。
我刚刚添加了Gson并为JSON创建了自定义实体提供程序。 它现在按预期工作,但我会更高兴自己不处理它,但让容器用JAXB配置的任何东西来做。
您的JSON,JSON将被解析的Java类以及您的JAX-RS资源方法看起来很好:
{
"name": "example",
"properties": {
"key1": "val1",
"key2": "val2"
}
}
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();
}
您可以考虑使用与Jersey集成的JSON提供程序,而不是像您在答案中提到的那样使用Gson。 杰克逊是一个不错的选择, Map
应该可以正常工作。
有关如何将Jackson与Jersey一起使用的详细信息,请参阅此答案 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.