在 springdoc 中禁用 JSR-303 注释处理

Disable JSR-303 annotation processing in springdoc

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

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

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

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"

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

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

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

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

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

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

JSR-303(例如@NotBlank@NotNull)注释位于类型参数前面:

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

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