java - 在 Java 类中共享公共(public)变量

标签 java json rest jackson fasterxml

以下问题可能太天真,但请帮我找到解决方案。

我正在开发 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/

相关文章:

javascript - 使用 C# 在 ASP.NET 文本中存储 JSON 并使用 JavaScript 访问它会引发 "invalid character"错误

java - 应用@EnableCircuitBreaker后获取异常java.lang.ArrayStoreException : sun. Reflect.annotation.TypeNotPresentExceptionProxy

java - 尝试从 eclipse oxygen 运行 Tomcat [Liferay] 时出错

c# - 统一 : Handling inheritance with JSONUtility. ToJSON

php - Rest API 如何通过基本身份验证进行身份验证?

javascript - 了解 API 转换和内部 API

spring - .rpm 、 '.swi' 和 '.swix' 的常见 mime 类型应该是什么?

java - 无法连接到端口 7

java - 如何使用 WebDriver 单击 <option> 元素?

php - 合并 JSON 同时保持键布局