当前位置: 首页 > 知识库问答 >
问题:

JAVAX验证约束在Spring Boot中不工作

狄楷
2023-03-14

我无法在我的Spring Boot应用程序中获得诸如@Not空、@NotBlank和@NotNull之类的注释。

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

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

...我不明白我做错了什么。

波乔:

import javax.validation.constraints.NotBlank;

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

Spring控制器:

@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之外,我还尝试了@Not空和@NotNull,但发生了同样的事情。我的屏幕不验证输入,并允许保存一个带有空学院代码的学院对象。

有趣的是,如果我改变我的POJO来使用弃用的HiberNate验证器...

import org.hibernate.validator.constraints.NotBlank;

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

...然后验证会启动,屏幕会阻止我用空collegeCode保存College对象。

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

共有3个答案

史骏
2023-03-14

我想我已经解决了这个问题。我有同样的问题,并试图降低Spring开机版本。我将我的spring boot版本从2.3.0降低到了2.3.0。发布到2.2.7。发布和它的工作)也许这个答案会帮助别人。

毛弘博
2023-03-14

包含2.3.0的Maven依赖项。pom.xml发布,但是对于较低版本的Spring Boot Application不需要它。

<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
  <groupId>javax.validation</groupId>
  <artifactId>validation-api</artifactId>
</dependency>
佟阳云
2023-03-14

从2.3.0版开始。发布默认情况下,web/webflux启动器中不包含验证启动器,您需要手动添加它。这里有更多细节

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
 类似资料:
  • 我使用的是Swagger(1.5.8),我想让我的定义检测DTO上的JSR-303注释,这样我就可以记录API的验证约束。 我希望注释(如本例)会显示关于最小值(44)的一些信息,但它不会。 由此产生的是: Swagger已经关闭了该功能的拉取请求,但我不清楚它在Swagger定义中的位置/方式。 我希望能够做这样的事情: 配置Swagger模块/插件以启用和等功能的首选方法是什么,以便他们检查我

  • (仅在测试中使用)我有依赖项(没有spring或DI容器) 我可以通过 myDto在哪里 哪里 哪里 在这个验证器中,所有的工作都很完美,但没有任何注释或在现场发挥作用,他们只是被忽略了 请帮忙。断然的 很抱歉,我的真实案例是相互嵌套的DTO,所以只有高级类经过验证,但没有嵌套。 而另一个有注释的字段未经验证。当我在字段中添加时,它开始正常工作

  • 我的springboot版本是2.3.7。我知道spring boot starter验证不是spring boot starter web的可传递依赖项。但即使单独添加了它,我的注释也不起作用。 //下面的依赖我已经添加build.gradle编译'org.springframework.boot: spring-boot-starter-validation' //我希望在请求时出错的示例类

  • 我正在尝试设置一个验证来比较两个日期。一个日期应该比另一个日期短。 此外,我为我的两个约会都创建了一个自定义约束。但问题是,我的注释接口无法处理非原始数据类型。 这是我的代码:(我知道这是错误的,但如果我展示我的源代码,也许你可以理解我的问题) 豆子: 注释界面: 所以这里有一个问题:我试图将类型放入类型。但是,如果我将我的和声明为,则存在一个问题: 还有其他方法来比较两次约会吗? 我错过了什么?

  • 我有以下验证器,用于验证更新请求。 object.getIdCreditor()有一个值,但是findById方法的执行["CreditorRepository.findById(object.getIdCreditor())" ] 进入NullPointer异常 我不明白怎么了。

  • 我对Spring有问题,尤其是ConstraintValidator。我想为包含电子邮件的字段发布自定义验证。它必须是独一无二的。好啊任务很明确,我是这样做的: UniqueMail。JAVA UniqueMailValidator。JAVA User.java 用户epository.java 授权控制器。JAVA 如果我尝试输入现有的电子邮件一切正常(得到消息电子邮件地址已经注册)。但如果我尝