以下问题可能太幼稚,但是请帮助我找到解决方案。
我正在使用Java RESTful API,以JSON格式发送响应格式。由于要设计多个API,因此我想到了将一些公共变量保留在Abstract类中,并尽可能重用。下面是我设计的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格式时。它将以响应格式带来所有不需要的变量。
用另一个Abstract类扩展Abstract。扩展类将产生相同的JSON格式,其中包含不需要的变量。
用变量创建接口-但是接口内部的变量应该是静态的或最终的。
请帮助突出显示是否有可用的解决方案来避免在JSON中发送不需要的密钥?
最佳答案
使用合成代替继承
例如:
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;
}
这样,您的模型比继承要灵活得多,在大多数情况下,使用继承不是一个好习惯。