开发者社区> 问答> 正文

在SringMVC中使用JSR-303进行校验 @Valid无效 :报错

引入的jar包

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.1.1.Final</version>
</dependency>

Spring版本4.3,JDK7

实体类

public class Spitter {
    //private Long id;

    //@NotNull
    @Length(min=5,message="最小长度为5")
    private String username;

    //@NotNull
    @Length(min=5,message="最小长度为5")
    private String password;

    //@NotNull
    @Length(min=2,message="最小长度为5")
    private String firstName;

    //@NotNull
    @Length(min=2,message="最小长度为5")
    private String lastName;

    public Spitter() {
    }

控制器

RequestMapping(value = "/register", method = POST)
public String processRegistration(@Validated Spitter spitter, BindingResult errors){
    if(errors.hasErrors()){
        return "registerForm";
    }
    System.out.println("has no errors");
    spitterRepository.save(spitter);
    return "redirect:/spitter/" + spitter.getUsername();
}

debug时:

明明长度不符合,为什么不报错

展开
收起
kun坤 2020-06-14 07:56:24 553 0
1 条回答
写回答
取消 提交回答
  • 注解错了, @Valid######

    用@Valid也一样

     

    ######

    @Configuration

    public class BeanValidatorConfiguration {

     

    /**

    *使用hibernate 效验

    *hibernate.validator.fail_fast 当出现一次错误,后面就不效验了

    *如果只有一个效验器,可以不用配置

    */

    @Bean

    public Validator validator(){

    ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )

    .configure()

    .addProperty( "hibernate.validator.fail_fast", "true" )

    .buildValidatorFactory();

    return validatorFactory.getValidator();

    }

     

    /**

    *使用@Validated 注解。validator后处理,使所有有这个注解的类都会被aop切面

    *spring boot 默认配置了,可以不用加

    */

     

    @Bean

    public MethodValidationPostProcessor methodValidationPostProcessor(){

    MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();

    methodValidationPostProcessor.setValidator(validator());

    return methodValidationPostProcessor;

    }

     

    }

    ######

    我新建了一个springMVC项目,只保留了一个bean,一个控制器和spring基本配置,包也只导入了这两个

    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.1.0.Final</version>
    </dependency>
    
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.3.1.Final</version>
    </dependency>

    又没问题了,我再看看之前那个项目问题是什么把

    2020-06-14 07:56:35
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载