javax 验证约束在 Spring Boot 中不起作用

2022-09-04 05:25:27

我无法在我的Spring Boot应用程序中获取诸如@NotEmpty,@NotBlank和@NotNull之类的注释。

我遵循了这个(maven)例子:

https://spring.io/guides/gs/validating-form-input/

...我看不出我做错了什么。

POJO:

import javax.validation.constraints.NotBlank;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class College
{    
    @NotBlank
    private String collegeCode;
.
.
.

弹簧控制器:

@RequestMapping(value="/addCollege", method = RequestMethod.POST) 
public String addCollege(@Valid @ModelAttribute("college") College college, BindingResult bindingResult, Model model, HttpSession session)
{
    if(bindingResult.hasErrors()) //this is never true
    {
        logger.debug("Errors when adding new college!!!");
        return "admin/colleges/addCollege";
    }
    collegeProcessor.saveCollege(college);
    return getAllColleges(model, session);
}

屏幕:

<form action="#" th:action="${addOrEdit} == 'add' ? @{/addCollege} : @{/updateCollege}" th:object="${college}" method="post">

    <table class="table">

        <tr>
            <td>College Code</td>
            <td><input size="10" name="collegeCode" th:field="*{collegeCode}"/></td>
            <div id="errors" th:if="${#fields.hasErrors('collegeCode')}" th:errors="*{collegeCode}"></div>
        </tr>
.
.
.

除了@NotBlank,我还尝试过@NotEmpty和@NotNull,但同样的事情发生了。我的屏幕不验证输入,并允许保存具有空 collegeCode 的 college 对象。

有趣的是,如果我将我的POJO更改为使用已弃用的Hibernate验证程序......

import org.hibernate.validator.constraints.NotBlank;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class College
{
    @NotBlank
    private String collegeCode;
.
.
.

...然后验证确实触发,屏幕阻止我使用空的学院代码保存学院对象。

谁能告诉我为什么我的验证在使用javax.validation.constraints验证器时不起作用?


答案 1

由于版本 2.3.0.RELEASE 默认情况下,验证启动器不包含在 web/webflux 启动器中,因此您需要手动添加它。更多详情请点击这里

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

答案 2

在 pom.xml 中包含 2.3.0.RELEASE 的 Maven 依赖项,但是,较低版本的 Spring Boot 应用程序不需要它。

<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
  <groupId>javax.validation</groupId>
  <artifactId>validation-api</artifactId>
</dependency>

推荐