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

时间:2016-08-29 14:44:20

标签: java json jax-rs

我有一个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依赖。

2 个答案:

答案 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

相关问题