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);
之后,您将获得想要的结果。
我对使用 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);
之后,您将获得想要的结果。