0

0

SpringBoot怎么使用validation做参数校验

WBOY

WBOY

发布时间:2023-05-21 11:10:10

|

1515人浏览过

|

来源于亿速云

转载

    1.添加依赖

    直接添加 hibernate-validator

    
                org.hibernate.validator
                hibernate-validator
                6.0.2.Final
            

    添加spring-boot-starter-validation

    
                org.springframework.boot
                spring-boot-starter-validation
                1.4.0.RELEASE
            

    添加spring-boot-starter-web

    
                org.springframework.boot
                spring-boot-starter-web
            

    2. 配置文件

    如果想要设置fail_fast属性的话,true表示有一个参数出错即返回,默认的时检验所有的参数,那么必须要有配置文件

    import org.hibernate.validator.HibernateValidator;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;
    import org.springframework.validation.beanvalidation.SpringValidatorAdapter;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    import javax.validation.Validation;
    import javax.validation.Validator;
    import javax.validation.ValidatorFactory;
    /**
     * hibernate参数验证配置
     */
    @Configuration
    public class ValidatorConfig extends WebMvcConfigurerAdapter {
    
    
        @Bean
        public Validator validator() {
            ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
                    .configure()
                    // 将fail_fast设置为true即可,如果想验证全部,则设置为false或者取消配置即可
                    .failFast(true)
    //                .addProperty("hibernate.validator.fail_fast", "true")
                    .buildValidatorFactory();
    
            return validatorFactory.getValidator();
        }
    
        /**
         * requestParam方式的校验
         * @return
         */
        @Bean
        public MethodValidationPostProcessor methodValidationPostProcessor() {
    
            MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
            methodValidationPostProcessor.setValidator(validator());
            return methodValidationPostProcessor;
        }
        @Override
        public org.springframework.validation.Validator getValidator() {
            return new SpringValidatorAdapter(validator());
        }
    }
    其中methodValidationPostProcessor是对requestParam起作用

    继承WebMvcConfigurerAdapter 并且重写getValidator()方法,是让spring的请求校验Validator使用我们上边的validator,让设置的failFast生效,具体可参考org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#mvcValidator方法

    3.统一异常处理

    /**
         * hibernate-valid实体类形式接受参数验证失败
         * @param ex
         * @return
         */
        @ExceptionHandler(BindException.class)
        @ResponseBody
        public WebResult validationErrorHandler(BindException ex) {
            List collect = ex.getBindingResult().getAllErrors()
                    .stream()
                    .map(ObjectError::getDefaultMessage)
                    .collect(Collectors.toList());
            return new WebResult(Errors.INCORRECT_PARAM_FORMAT.getError(), StringUtils.join(collect, ";"));
        }
    
        /**
         * hibernate-valid实体类形式接受参数验证失败
         * @param ex
         * @return
         */
        @ExceptionHandler(MethodArgumentNotValidException.class)
        @ResponseBody
        public WebResult validationErrorHandler(MethodArgumentNotValidException ex) {
            List collect = ex.getBindingResult().getAllErrors()
                    .stream()
                    .map(ObjectError::getDefaultMessage)
                    .collect(Collectors.toList());
            return new WebResult(Errors.INCORRECT_PARAM_FORMAT.getError(), StringUtils.join(collect, ";"));
    
        }
        /**
         * RequestParam方式参数校验
         * @param ex
         * @return
         */
        @ExceptionHandler(ConstraintViolationException.class)
        @ResponseBody
        public WebResult validationErrorHandler(ConstraintViolationException ex) {
            List errorInformation = ex.getConstraintViolations()
                    .stream()
                    .map(ConstraintViolation::getMessage)
                    .collect(Collectors.toList());
            return new WebResult(Errors.INCORRECT_PARAM_FORMAT.getError(),StringUtils.join(errorInformation, ";"));
        }

    4.使用

    如果是@RequestParam这样直接写参数校验的话,在类上或者对应方法上加上Validated注解,如果是实体类接受的话,在参数中的实体前加上@Valid即可

    Dora
    Dora

    创建令人惊叹的3D动画网站,无需编写一行代码。

    下载

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    spring框架介绍
    spring框架介绍

    本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

    117

    2025.08.06

    Java Spring Security 与认证授权
    Java Spring Security 与认证授权

    本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

    69

    2026.01.26

    hibernate和mybatis有哪些区别
    hibernate和mybatis有哪些区别

    hibernate和mybatis的区别:1、实现方式;2、性能;3、对象管理的对比;4、缓存机制。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    148

    2024.02.23

    Hibernate框架介绍
    Hibernate框架介绍

    本专题整合了hibernate框架相关内容,阅读专题下面的文章了解更多详细内容。

    84

    2025.08.06

    Java Hibernate框架
    Java Hibernate框架

    本专题聚焦 Java 主流 ORM 框架 Hibernate 的学习与应用,系统讲解对象关系映射、实体类与表映射、HQL 查询、事务管理、缓存机制与性能优化。通过电商平台、企业管理系统和博客项目等实战案例,帮助学员掌握 Hibernate 在持久层开发中的核心技能。

    37

    2025.09.02

    Hibernate框架搭建
    Hibernate框架搭建

    本专题整合了Hibernate框架用法,阅读专题下面的文章了解更多详细内容。

    69

    2025.10.14

    servlet生命周期
    servlet生命周期

    Servlet生命周期是指Servlet从创建到销毁的整个过程。本专题为大家提供servlet生命周期的各类文章,大家可以免费体验。

    376

    2023.08.08

    AO3官网入口与中文阅读设置 AO3网页版使用与访问
    AO3官网入口与中文阅读设置 AO3网页版使用与访问

    本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

    89

    2026.02.02

    主流快递单号查询入口 实时物流进度一站式追踪专题
    主流快递单号查询入口 实时物流进度一站式追踪专题

    本专题聚合极兔快递、京东快递、中通快递、圆通快递、韵达快递等主流物流平台的单号查询与运单追踪内容,重点解决单号查询、手机号查物流、官网入口直达、包裹进度实时追踪等高频问题,帮助用户快速获取最新物流状态,提升查件效率与使用体验。

    24

    2026.02.02

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Redis6入门到精通超详细教程
    Redis6入门到精通超详细教程

    共47课时 | 5.3万人学习

    YMP在线手册
    YMP在线手册

    共64课时 | 40.6万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号