hibernate-validator 6.1版本开始不支持使用BindingResult获取错误信息了?

沉梦昂志
  • 5
新手上路,请多包涵

刚刚使用了官网下载的最新版本hibernate-validator 7.0,发现用BindingResult的方式死活获取不到错误

image.png

然后观察发现用到的包和以前5.2.4用到的包不一样了,当切换回5.2.4的包之后功能一切正常,于是打开官网发现从6.1版本开始就开始使用Jakarta Bean Validation进行验证,用到的包名字从这个版本开始变了。请问6.1以后我这种写法为啥不起作用了??应该怎么写呢?谢谢

image.png

另外附上官网下载地址 http://hibernate.org/validato...


补充:刚刚发现所有jakarta.validation.constraints下的注解都无法使用BindingResult获取错误,org.hibernate.validator.constraints下的才可以。。请问怎么办呢


再次补充,附上代码

  • User.java

    import jakarta.validation.constraints.NotNull;
    import jakarta.validation.constraints.Past;
    import org.hibernate.validator.constraints.Length;
    import org.springframework.format.annotation.DateTimeFormat;
    import org.springframework.format.annotation.NumberFormat;
    
    import java.util.Date;
    
    public class User {
      @NotNull(message = "id不能为空")
      private Integer id;
      @Length(min = 2, max = 12, message = "姓名长度必须在2到12位")
      private String name;
      @DateTimeFormat(pattern = "yyyy-MM-dd")
      @Past(message = "出生日期不能超过当前时间")
      private Date birth;
      @NumberFormat(pattern = "##,###.##")
      private Double salary;
    
      public User() {
      }
    
      public User(Integer id, String name, Date birth, Double salary) {
          this.id = id;
          this.name = name;
          this.birth = birth;
          this.salary = salary;
      }
    
      public Integer getId() {
          return id;
      }
    
      public void setId(Integer id) {
          this.id = id;
      }
    
      public String getName() {
          return name;
      }
    
      public void setName(String name) {
          this.name = name;
      }
    
      public Date getBirth() {
          return birth;
      }
    
      public void setBirth(Date birth) {
          this.birth = birth;
      }
    
      public Double getSalary() {
          return salary;
      }
    
      public void setSalary(Double salary) {
          this.salary = salary;
      }
    
      @Override
      public String toString() {
          return "User{" +
                  "id=" + id +
                  ", name='" + name + '\'' +
                  ", birth=" + birth +
                  ", salary=" + salary +
                  '}';
      }
    }
  • TestDataBindingController.java

    import jakarta.validation.Valid;
    import org.springframework.stereotype.Controller;
    import org.springframework.validation.BindingResult;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import pojo.User;
    
    @Controller
    @RequestMapping("/part3")
    public class TestDataBindingController {
    
      @RequestMapping("/test")
      public String test(@Valid User user, BindingResult bindingResult) {
          bindingResult.getAllErrors().forEach(error -> System.out.println(error.getDefaultMessage()));
          System.out.println(user);
          return "index";
      }
    }
回复
阅读 364
2 个回答

spring 版本多少?
可能需要5.x的版本才支持这个版本的参数校验

沉梦昂志
  • 5
新手上路,请多包涵

顶一下贴。。有人知道吗

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏