在 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
。
如何在 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
。