以下问题可能太天真,但请帮我找到解决方案。
我正在开发 Java RESTful API,我以 JSON 格式发送响应格式。由于需要设计多个 API,我想到将一些公共(public)变量保留在抽象类中并尽可能重用。下面是我设计的2个抽象类。
public @Data abstract class AbstractEntityWebServResDTO<D> {
// Attributes
//////////////
protected Date createdDt;
protected String createdBy;
protected Date updatedDt;
protected String updatedBy;
}
public @Data abstract class AbstractModifyWebServReqDTO<D> {
// Attributes
//////////////
protected boolean delete;
protected boolean modify;
}
响应 DTO 的一些示例。
public @Data class ResponseFormat1 extends AbstractEntityWebServResDTO<ResponseFormat1>{
protected String response1Data;
}
这将生成 JSON:
{
"response1Data": "SOME DATA",
"createdDt": "2019-11-02 23:33:23",
"createdBy": "USERID",
"updatedDt": "2019-11-02 23:33:23",
"updatedBy": "USERID"
}
响应 DTO 的另一个示例
public @Data class ResponseFormat2 extends AbstractModifyWebServReqDTO<ResponseFormat2>{
protected String response2Data;
}
这将生成 JSON:
{
"response2Data": "SOME DATA",
"delete": true,
"modify": false
}
如上所示,这些类扩展了与其相关的不同抽象类。但在某些情况下,我需要使用两个抽象类中存在的所有变量。由于我们无法扩展 2 个抽象类,我该如何实现这一点?
我想到的解决方案:
- 创建一个包含所有变量的抽象类并使用它。但因为我正在使用 FasterXML 将 DTO 转换为 JSON 格式。它将在响应格式中引入所有不需要的变量。
- 用另一个抽象类扩展抽象。扩展类将生成相同的 JSON 格式,其中包含不需要的变量。
- 使用变量创建接口(interface) - 但接口(interface)内的变量应该是静态的或最终的。
请帮助强调是否有任何解决方案可以避免在 JSON 中发送不需要的 key ?
最佳答案
使用组合而不是继承
示例:
public class CreateInfo {
protected String updatedDt;
protected String updatedBy;
}
public class UpdateInfo {
protected Date updatedDt;
protected String updatedBy;
}
public class FinalModel {
protected CreateInfo createInfo;
protected UpdateInfo updateInfo;
}
这样你的模型比继承更加灵活,在大多数情况下使用继承并不是一个好的做法。
关于java - 在 Java 类中共享公共(public)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58672910/