千家信息网

springmvc项目使用@Valid+BindingResult遇到的问题怎么解决

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"springmvc项目使用@Valid+BindingResult遇到的问题怎么解决"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处
千家信息网最后更新 2026年11月03日springmvc项目使用@Valid+BindingResult遇到的问题怎么解决

本篇内容介绍了"springmvc项目使用@Valid+BindingResult遇到的问题怎么解决"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    第一步:pom.xml中引入

    javax.validation和hibernate-validator

                                            javax.validation                        validation-api                        2.0.1.Final                                                        org.hibernate                        hibernate-validator                        6.0.16.Final                

    之前我只引入了javax的验证,这样做系统不会报错。就是bindingResult返回的errors一直为0。校验不起作用。

    第二步:创建需要校验的参数bean类

    需要引入的类:

    import javax.validation.constraints.Min;import javax.validation.constraints.NotBlank;import javax.validation.constraints.NotNull;import javax.validation.constraints.Pattern;
    @Componentpublic class UserScheduleByManualBean implements Serializable {         /**         *          */        private static final long serialVersionUID = 8093326646402381469L;         @NotBlank(message = "赛事不能为空")        private String matchEventName; // 赛事名称         @NotBlank(message = "发枪时间不能为空")        @Pattern(regexp = "((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))\\s([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$", message = "发枪格式错误")        private String gunTime; // 发枪时间                @NotNull(message = "国家ID不能为空")        @Min(value = 0,message = "国家ID数据格式错误")        private int dicCountryId; // 国家ID                @NotBlank(message = "国家名称不能为空")        private String countryName; // 国家名称                @NotNull(message = "省份ID不能为空")        @Min(value = 0,message = "省份ID数据格式错误")        private int dicProvinceId; // 省份ID        @NotBlank(message = "省份名称不能为空")        private String provinceName; // 省份名称                @NotNull(message = "城市ID不能为空")        @Min(value = 0,message = "城市ID数据格式错误")        private int dicCityId; // 城市ID        @NotBlank(message = "城市名称不能为空")        private String cityName; // 城市名称                    private String projectName; // 项目名称        private String remarks; // 说明 可以为空        private String bib; // 赛号 可以为空     //get和set方法忽略}

    这里一定要注意两个问题

    1: bean上加@Component注解,并且spring配置要扫描到这个包,否则也不生效。

    2: @valid方式校验,有很多限制注解(后面附表)。不通的限制注解,对应的数据类型不一样。比如:@Pattern注解,只能在String类型上使用。我一开始希望int的属性也直接通过正则做校验。结果报错:HV000030: No validator could be found for constraint 'javax.validation.constraints.Pattern' validating type 'java.lang.Integer'

    3: 注解可以多个

    第三步:写controller类

    首先,我们先创建一个BaseController抽象类,其中有BindingResult校验方法,其他所有的controller继承该类实现校验。

    引入的java类:

       import org.springframework.validation.BindingResult;       import javax.validation.Valid;
    public abstract class BaseController {         /**         * 校验通过bean当参数的验证结果方法         * @param bindingResult         * @return         */        protected Map validate(BindingResult bindingResult) {                 Map ret = new HashMap<>();                boolean isTrue = true;                StringBuilder sb = new StringBuilder("");                if (bindingResult.hasErrors()) {                        bindingResult.getAllErrors().forEach(o ->{                FieldError error = (FieldError) o;                sb.append("|" + error.getDefaultMessage());//       添加错误信息            });                        isTrue = false;                }                 ret.put("isTrue", isTrue);                ret.put("message", sb.toString());// 错误信息                return ret;        }}

    其次,我们创建业务的controller类,继承BaseController。

    @Api(value = "TestController-API", description = "测试操作接口")@Controller@RequestMapping("testController/*")public class TestController extends BaseController {     @RequestMapping(value = "tstex", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")        @ApiOperation(value = "测试异常方法", notes = "测试异常方法")        public @ResponseBody String tstex(@Valid @RequestBody UserScheduleByManualBean userScheduleByManualBean,                        BindingResult bindingResult) {                Map ret = new HashMap<>();                 // 校验userScheduleByManualBean是否合法                Map validRet = validate(bindingResult);                boolean isTrue = (Boolean) validRet.get("isTrue");                if (!isTrue) {                        // 参数不合法                        String erroMsg = (String) validRet.get("message");                        ret.put("resultCode", "0001");                        ret.put("resultDesc", "参数错误" + erroMsg);                        return JsonUtil.gson_ObjectToJSON(ret);                }                 ret.put("resultCode", "0000");                ret.put("resultDesc", "成功");                return JsonUtil.gson_ObjectToJSON(ret);        }}

    这里需要注意的问题:@Valid和@RequestBody是有位置关系的,必须@Valid在前面。BindingResult bindingResult作为参数传递进来,然后通过validate校验参数,并设置统一的返回结果。

    通过swagger运行结果如下:

    附 件

    限制注解说明限制类型样例
    @Null限制只能为null全部@Null(message="")
    @NotNull限制必须不为null全部@NotNull(message="")
    @AssertFalse限制必须为false

    @AssertTrue限制必须为true

    @DecimalMax(value)限制必须为一个不大于指定值的数字

    @DecimalMin(value)限制必须为一个不小于指定值的数字

    @Digits(integer,fraction)限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction

    @Future限制必须是一个将来的日期

    @Max(value)限制必须为一个不大于指定值的数字int@Max(value=100,message="")
    @Min(value)限制必须为一个不小于指定值的数字int@Min(value=100,message="")
    @Past限制必须是一个过去的日期

    @Pattern(value)限制必须符合指定的正则表达式String

    @Pattern(regexp="",message="")

    @Size(max,min)限制字符长度必须在min到max之间

    @NotEmpty验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)String

    @NotEmpty(message = "")

    @NotBlank验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格String

    @NotBlank(message = "")

    @Email验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式String

    "springmvc项目使用@Valid+BindingResult遇到的问题怎么解决"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

    限制 注解 名称 错误 参数 国家 城市 方法 格式 省份 验证 问题 字符 数字 数据 项目 元素 字符串 正则 类型 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网与科技 互联网科技公司排名 百单网互联网科技有限公司怎么样 苏州找大状互联网科技有限公司 互联网和科技技术 深圳互联网络科技有限公司 互联网科技视频 中正互联网科技招聘 新华互联网科技校企合作 成都仁贤领冠互联网科技有限公司 蓝色互联网科技 茂名市互联网科技产业园 速维有品互联网信息科技(苏州)有限公司 996高科技互联网公司 深圳艾果互联网通讯科技 保险科技服务互联网营销体系 互联网科技资金流入 陕西九四连强互联网科技有限公司 广州三三互联网科技有限公司 优雇互联网科技有限公司 互联网通讯科技 互联网下的科技发展 上海互联网科技有限公司 腾讯科技 互联网女皇 汇久创客互联网科技 成都互联网科技公司工作好不好 中科明德北京互联网科技 华中科技大学互联网的牛人 浙南科技城互联网大厦招聘 互联网科技手机排行榜
    0