JAX-RS 和 Jersey:正确嵌套 JSON

JAX-RS & Jersey: Properly Nested JSON

我对使用 JAX-RS 和 Jersey 还很陌生。我面临的问题是我无法以 JSON 的方式得到响应。我想要类似于以下内容的回复:

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

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

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

这只会给我以下信息:

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

如何获得 "result":"success" 的响应。这将帮助我解决未来更复杂的问题。感谢您的帮助。

P.S。我考虑过尝试 return 哈希图,但这给了我一个错误,似乎我会陷入更深的困境。

假设您的提供者是 Jackson,您可以将其包装在一个带有 result 字段的自定义 ResponseEntity 对象中,以及带有 getter 的 Map<String, Object>@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 中的属性。在创建实例和所有 entity.addField("car", carObject); 之后,您将获得想要的结果。