繁体   English   中英

JAX-RS将JSON子属性解组为哈希映射

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM