当前位置: 首页 > 知识库问答 >
问题:

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

柯建业
2023-03-14

如何在自动生成的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

自动生成POJO类内的toString方法

@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()));

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

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

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

但是在这个自动生成的类的情况下,有没有任何方法可以仅为日志目的屏蔽任何属性?

我在yml文件中尝试了如下标志

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

但这一个也没有按照预期的方式形成属性。

共有1个答案

乔俊才
2023-03-14

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

模式示例

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

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

  • http://docs.reprezen.com/codegen_custom_swagger_gentemplate/
 类似资料:
  • 我正在编写FastAPI程序,它只是一堆用于查询数据的endpoint。他们可以使用许多不同的查询参数,这些参数是从配置文件中自动生成的,例如endpoint可能看起来像

  • 使用指南 - 账户管理 - 屏蔽管理 - 如何屏蔽IP和访客 如果您希望自己的搜索推广广告不展现给指定的IP或访客,您可以在“报告”->”流量分析”->“实时访客”报告中对这些IP和访客进行屏蔽。 鼠标悬停在如图位置,将会有提示您可以屏蔽该IP或屏蔽该访客标识码。如果未找到访客IP或访客标识码指标,可以到上方的自定义指标中进行设置。 注意: 1、屏蔽功能只针对搜索推广带来的访客,如果非搜索推广带来

  • 问题内容: 我正在尝试屏蔽Java中的密码。Sun Java已提出一种掩盖密码的方法,如下所示。 屏蔽密码 它使用一种简单的方法来做到这一点。 但是这种方法有几个缺点。 如果用户使用箭头键+删除键,则会显示密码。 如果用户不小心同时按下了两个键(极高的打字速度),某些字符将不会被掩盖。 你们认为有什么方法可以获得100%正确的遮罩吗? 问题答案: 使用Console.readPassword()。

  • 我正在编写一个OpenAPI规范,并试图从请求路由/路径的注释中自动(使用swagger-php)生成我可能的查询参数。我知道我可以为每个路由键入所有可能的参数选项,但我确实需要能够使用注释从类的属性自动生成可能的参数,就像我可以为请求体所做的那样。(我们将有大量的类/路径,除非它们像请求体/JSONContent那样生成,否则很可能无法保持更新。这在一般的swagger-php甚至OpenAPI

  • 同样的规则也将应用于destination_num。表中的现有值需要替换为屏蔽值。我读过一些关于Oracle12c中数据编辑的文章,但提到了它,因为我们只能选择屏蔽数据,而不能选择更新。

  • 我有模型用户,类别和邮政。帖子属于很多用户,很多类目。用户和类别不相关。我创建了一个自定义数据透视表,其中存储user_id和category_id,以及该表的模型类别块。我如何才能获得用户没有屏蔽的所有帖子?