【问题标题】:Disable JSR-303 annotation processing in springdoc在 springdoc 中禁用 JSR-303 注释处理
【发布时间】:2021-06-13 23:05:32
【问题描述】:

如何在 springdoc 中为特定字段禁用 JSR-303 注释处理?

我有以下请求类 MyRequestTO 其中字段 name 实际上是可选的。 @NotBlank 注解仅适用于未包装的JsonNullable。这意味着用户可以在发送MyRequestTO 时省略该字段,但如果设置它不能为空。但是,打开的 api 文档将 name 字段标记为必需。将 @Schema 注释更改为 @Schema(type = "string", required = false) 没有帮助。

我想避免必须编写自己的注释并使用org.springdoc.core.customizers.OpenApiCustomiser 的解决方案。所需的解决方案也应该适用于其他类型,例如带有 @NotNull 注释的 JsonNullable<Boolean>

public class MyRequestTO {

    @Schema(type = "string")
    @NotBlank
    private JsonNullable<String> name = JsonNullable.undefined();

    public JsonNullable<String> getName() {
        return name;
    }

    public void setName(JsonNullable<String> name) {
        this.name = name;
    }
}

相关依赖

implementation "org.openapitools:jackson-databind-nullable:0.2.1"
implementation "org.springdoc:springdoc-openapi-ui:1.5.5"

【问题讨论】:

  • 你试过玩formatpattern吗?
  • @mrkernelpanic 在另一种情况下,是的。但是format 和/或pattern 如何解决我的问题?
  • 我考虑过您的要求,即在不为空时至少在该字段中填充一些内容,而正则表达式可以解决这个问题。但显然我并没有那么深入地卷入这种特殊情况。
  • 如果把注解放在泛型类型参数(即private JsonNullable&lt;@NotBlank String&gt; name = JsonNullable.undefined();)上会怎样?
  • @crizzis 按预期工作。谢谢

标签: java swagger springdoc springdoc-openapi-ui


【解决方案1】:

这不起作用,因为@NotBlank 允许空值

@NotNull 类 isValid() 方法在 @NotBlank 类 isValid() 之后调用,因此禁止空值。

因此您可以尝试使用@Pattern 验证非黑色字符串,如下所示:

@Pattern(regexp = "/^$|\\s+/")
String name

这将允许非空值但不允许空字符串

【讨论】:

  • 感谢您的尝试,但这并不是我真正想要的。首先,这个建议已经在我的问题下面的 cmets 中提出了。其次,我正在寻找一种方法来禁用对这些注释的处理。所需的解决方案也应该适用于其他类型,例如用@NotNull 注释的JsonNullable&lt;Boolean&gt;。也许我应该更好地澄清这一点。
【解决方案2】:

cmets 对我的问题的@crizzis 解决方案按预期工作。字段不再标记为必填,但如果提供必须符合注释约束。

JSR-303(例如@NotBlank@NotNull)注解属于类型参数的前面:

private JsonNullable<@NotBlank String> name = JsonNullable.undefined();
private JsonNullable<@NotNull Boolean> enabled = JsonNullable.undefined();

然后生成的 openAPI 文档会将字段标记为 "required" : false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    相关资源
    最近更新 更多