【问题标题】:How to mask any parameter inside auto generated swagger java class如何屏蔽自动生成的 swagger java 类中的任何参数
【发布时间】:2019-05-03 13:57:05
【问题描述】:

如何屏蔽自动生成的 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() 有完整的 toString 数据,带有 Id 名称和 nric,这里我想显示 ma​​sked nric 而不是直接的 nric 值。

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

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

但是在这种自动生成的类的情况下,有没有办法屏蔽任何属性仅用于记录目的?

我已经尝试在 yml 文件中使用如下标志

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

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

【问题讨论】:

    标签: java spring-boot swagger spring-aspects


    【解决方案1】:

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

    架构示例:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 2014-04-18
      • 2017-08-06
      • 1970-01-01
      • 2019-04-09
      相关资源
      最近更新 更多