java - 如何屏蔽自动生成的 swagger java 类中的任何参数

标签 java spring-boot swagger spring-aspects

如何屏蔽自动生成的 swagger java 类中的任何参数?
如果手动 getter setter 类,我们可以编辑 toString 方法,但在自动生成的类中,它将在每次构建时生成 swagger pojo 类,那么如何修改由 swagger 自动生成的 toString 方法?

下面是代码

api.yml(通过swagger生成POJO类)

InsuredDTO:
type: object
properties:
  id:
    type: integer
    format: int64
  name:
    type: string
  nric:
    type: string

toString自动生成POJO类中的方法

@Override
public String toString() {
  StringBuilder sb = new StringBuilder();
  sb.append("class InsuredDTO {\n");

  sb.append("    id: ").append(toIndentedString(id)).append("\n");
  sb.append("    name: ").append(toIndentedString(name)).append("\n");
  sb.append("    nric: ").append(toIndentedString(nric)).append("\n");
  sb.append("}");
  return sb.toString();
}

LoggingAspect类中添加一些日志

log.debug("Enter: {}.{}() with argument[s] = {}", joinPoint.getSignature().getDeclaringTypeName(),
            joinPoint.getSignature().getName(), Arrays.toString(joinPoint.getArgs()));

在此日志中 joinPoint.getArgs() 具有包含 ID 名称和 nric 的完整 toString 数据,这里我想显示屏蔽 nric 而不是直接 nric 值(value)。

如果它不是自动生成的类,那么我们可以在 toString 方法中添加如下内容。

sb.append("nric: ").append("********").append("\n");

但是在自动生成的类的情况下,有什么方法可以仅出于日志记录目的屏蔽任何属性吗?

我尝试在 yml 文件中使用标志,如下所示

properties:
  id:
    type: integer
    format: int64
  nric:
    type: string
    format: password

但这也没有以预期的方式格式化属性。

最佳答案

我在一个旧项目上添加了类似的要求,我使用了一个扩展字段(请参阅 OpenAPI 3.0 Spec ,文件结尾),例如 x-nolog 和自定义代码生成器:

架构示例:

User:
  type: object
  required:
  - name
  - password
  x-nolog:
  - password
  properties:
    name:
      type: string
    password:
      type: string

要创建自定义代码生成器,您可以看到:

关于java - 如何屏蔽自动生成的 swagger java 类中的任何参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55971295/

相关文章:

python - 使用 Swagger 生成的新代码更新 Flask 代码

api - 如何在 swagger 中记录 websocket 事件或回调

java - Log4j2 未记录到文件

java - java8 中的错误不兼容类型 : Not able to understand Function<R, T>

java - Tomcat8 部署时挂起

java - 变量中的 Dockerfile Spring Boot 属性不起作用

java - 为我的 webapp 自动添加 "www"子域

java - 把句子分成单词和标点符号

spring-boot - Spring Boot 太多重定向

android - 如何使用 swagger 从 wp rest api 生成 Retrofit 客户端库