@Size 注释似乎不适用于我的课程

Vah*_*yan 5 java configuration annotations spring-boot

我有一个 Spring Boot 控制器,其端点接受以下配置类(作为 json)。该类具有参数maxIterations并将@Size注释设置为9000

...
import javax.validation.constraints.Max;
import javax.validation.constraints.Size;

public class Configuration {
    // Max iterations
    @Size(max = 9000)
    private Integer maxIterations;

    ...
}
Run Code Online (Sandbox Code Playgroud)

问题是,当使用POST以下命令调用该端点时json,它不会返回错误或警告,说明参数maxIterations高于9000

{
  "maxIterations": 15000
}
Run Code Online (Sandbox Code Playgroud)

这是我的控制器:

@PostMapping()
@ResponseStatus(HttpStatus.CREATED)
public String doSomething(@RequestBody Configuration configuration) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

可能是什么问题?

g00*_*00b 5

正如评论中提到的,您应该使用@Max(9000)as@Size只能用于数组、字符串、集合和映射。

public class Configuration {
    @Max(9000)
    private Integer maxIterations;

    // ...
}
Run Code Online (Sandbox Code Playgroud)

此外,您应该@Valid在控制器中使用注释,以便 Bean 验证器知道类中存在约束Configuration,例如:

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public String doSomething(@Valid @RequestBody Configuration configuration) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

仅当您在类路径上正确实现了Java Validation API时,这才有效。这可以通过添加以下依赖项来完成:

<dependency>
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-validation</artifactId> 
</dependency>
Run Code Online (Sandbox Code Playgroud)

在 Spring boot 2.3 之前,这会自动包含在spring-boot-starter-web依赖项中,但现在您必须手动包含依赖项。

  • 在这种情况下,我必须添加以下启动器来提供验证器配置: &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-validation&lt;/artifactId&gt; (4认同)
  • @VaheKarapetyan 此外,请提供您使用的依赖项列表。仅当验证 API 的正确实现位于类路径上时,才会创建验证处理器 bean。默认情况下,如果您使用 **spring-boot-starter-web**,则您的类路径上应该有 **hibernate-validator**。 (3认同)