JAX-RS&泽西岛:正确嵌套的JSON

时间:2016-01-09 05:25:51

标签: java json jersey jax-rs

我是使用JAX-RS和Jersey的新手。我面临的问题是我无法按照自己的方式获得JSON响应。我想要一个类似于以下内容的响应:

{
    "result": "success",
    "car": {
        "id": 42,
        "name": "toyota",
        "model": "camry"
    }
}

到目前为止,我有一个名为Car的课程。它有3个字段:id,name和带有getter和setter的模型。我使用返回类型为Car的函数获得了Car的单个实例的格式正确的JSON响应。

public Car getCarWithId(@PathParam("id") int id) {
        return carService.getCarWithId(id);
    }

这只给我以下内容:

{
    "id": 42,
    "name": "toyota",
    "model": "camry"
 }

如何通过“结果”获得响应:“成功”。这有助于我将来解决更复杂的问题。谢谢你的帮助。

P.S。我想过尝试返回一个hashmap,但这给了我一个错误,好像我会进入一个更深的洞。

1 个答案:

答案 0 :(得分:1)

假设您的提供者是杰克逊,您可以将其包含在具有ResponseEntity字段的自定义result对象中,并将Map<String, Object>包含在内,并使用{{1}注释获取者}。例如

@JsonAnyGetter

public class ResponseEntity { private String result; private final Map<String, Object> otherFields = new HashMap<>(); public String getResult() { return result; } @JsonAnyGetter public Map<String, Object> getOtherFields() { return otherFields; } public void addField(String field, Object value) { otherFields.put(field, value); } } 所做的是使@JsonAnyGetter不是序列化的,而只是otherField中的属性。您创建实例后,以及所有Map,您将获得所需的结果。