春季启动请求验证不起作用



应用程序背景

  • 弹簧引导版本1.5.12
  • 通过swagger codegen maven插件生成的Java bean

问题

使用开放式API 3.0创建的型锻模板使用型锻-codegen-maven-plugin转换为pojos。。

这是生成pojo

public class TestPojo {
@JsonProperty("isNameValid")
private Boolean isNameValid = null;
@Schema(
required = true,
description = "Checks if name is Valid "
)
public Boolean isIsNameValid() {
return this.isNameValid;
}
}

这是使用的型锻模板

openapi: 3.0.1
info:
title: XM MNOLine Domain Definitions
description: |
version: "V0.0.1"
components:
schemas:
TestPojo:
required:
- isNameValid
properties:
isNameValid:
type: boolean
description: |
Checks if name is Valid

在控制器中,@Valid注释似乎没有任何影响。。仍处理字段"isNameValid"的Null值或无值。。

processRequest(@Valid @RequestBody TestPojo request)

我错过了什么。。

似乎已经报告了此问题。。https://github.com/swagger-api/swagger-codegen/issues/7058

如果我理解它是正确的,那么您希望您的"isNameValid"字段出现在请求else-throw异常中。

因此,为了使您的字段在请求中成为强制性字段,您必须用@NotNull对其进行注释。

前任。

public class TestPojo {
@JsonProperty("isNameValid")
@NotNull
private Boolean isNameValid;
public void setIsNameValid(Boolean isNameValid) {
this.isNameValid = isNameValid;
}
public Boolean isNameValid() {
return isNameValid;
}
}

上述代码将不允许该字段的null值,即请求将需要具有isNameValid

我希望它能解决你的问题。

如果我误解了你的要求,请告诉我,我会尽力解决你的问题。

编辑

嗨,我目前没有任何正在进行的项目使用swagger开放api,所以我不能测试它,但你能检查一下Validate spring contracts吗。

我希望这能有所帮助,否则请告诉我。

祝你好运!

最新更新