【发布时间】:2017-11-20 01:18:48
【问题描述】:
我正在尝试使用 java 和 spring boot 创建一个 API 控制器。我想从特定的 API 端点以 JSON 形式返回特定的对象,到目前为止没有什么特别的。现在我有一个子类A和一个父类B。B是抽象的,A不是抽象的,但是A包含的属性比B多。我必须将超类的属性从A传递到API端点,但是当我转换时超类对象的对象 JSON 代码始终包含来自 A 的属性。
除了将不相关的部分设置为 null 或空元素之外,还有其他方法可以防止这种情况发生吗?
编辑:
我有以下代码:
@Entity
public abstract class B {
private String name;
private String description;
/* GETTERS AND SETTERS */
}
@Entity
public class A extends B {
private String moreInformation;
/* GETTERS AND SETTERS */
}
@RestController
@RequestMapping("/api/v1/")
public class ApiController {
@RequestMapping(value = "/Bs", method = RequestMethod.GET)
public ResponseEntity<List<B>> getBs() {
List<A> As = DAO.getAllRelevantAsAsList();
List<B> Bs = new ArrayList<>();
Bs.appendAll(As);
return new ResponseEntity<>(Bs, HttpStatus.OK);
}
/* DIFFERENT API ENDPOINTS */
}
API Endpoint 生成的 JSON 代码如下所示:
[
{
"name": "CONTENT",
"description": "CONTENT",
"moreInformation": "CONTENT"
},
...
]
我通过使用@JsonIgnore 注释类A 的属性找到了解决此问题的可能方法。但是这个线程的主要问题不限于这个特殊的实现:是否可以只获取父类A的属性而不注子类?
【问题讨论】:
-
你用的是什么 JSON 序列化库?
-
fasterxml 杰克逊库
-
您需要显示您尝试过的代码...
-
解决方案之一是编写自定义序列化程序。 baeldung.com/jackson-custom-serialization
标签: java json rest api inheritance