• springBoot单参数校验全局异常抛出


    由于valid框架校验需要通过实体类实现,本人懒不想写那么多实体,所以捕获异常抛出与valid相同的错误提示

     @Valid控制层这样写就会根据实体类的注释进行参数校验

     校验框架会根据注释校验参数并给出规定好的提示如果没写 message 那么只会提示不能为空

    原以为直接在控制层使用这个注释也可以实现(可达鸭发现问题并没这么简单)

     @Vaild 并不会校验这种直接写在控制层的校验

    他大哥@Validated 该出现了

    1.先在控制层加注释(其他不变)

     2.这里是添加了个校验一个不通过直接不校验第二个参数的配置类(多参数也可以在控制层直接写@NotNull这类注释)

    @Configuration
    public class ValidatorConfig {
    
        // 校验一个不通过不进行下一个校验直接返回
        @Bean
        public Validator validator() {
            LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean();
            MessageInterpolatorFactory interpolatorFactory = new MessageInterpolatorFactory();
            factoryBean.setMessageInterpolator(interpolatorFactory.getObject());
            factoryBean.getValidationPropertyMap().put("hibernate.validator.fail_fast", "true");
            return factoryBean;
        }
    }

    3.重点来了我们捕获 大哥 抛出的异常稍加修改返回前端,造成是同一个校验方式返回信息的错觉

    @RestControllerAdvice
    public class ExceptionHandler {
    
        @org.springframework.web.bind.annotation.ExceptionHandler(ConstraintViolationException.class)
        public Result<Long> handle(ConstraintViolationException e) {
            String name = e.getMessage().substring(e.getMessage().indexOf(':') + 1, e.getMessage().length());
            Result<Long> result = new Result<>();
            result.setCode(10001);
            result.setMsg(name);
            return result;
        }
    }

    比较low 通过:截取的提示内容(比较菜 cv码农)

    这样就可以不用多走一层实体类直接校验参数了

    贴一下效果图

    @Validated 提示的也就是我们自己截取的

    @Valid 提示的

     我觉得吧去个空格也差不多  哈哈

    至此 

    感谢观看 如有错误麻烦大佬提点 !!!

    2020-09-04 16:43:46

  • 相关阅读:
    mysql多源复制,多主一从复制
    Linux初始化环境安装
    sql2014 错误:已将此(这些)订阅标记为不活动,必须将其重新初始化。需要删除NoSync 订阅,然后重新创建它们
    Jmeter之模拟文件上传、下载接口操作--转载
    配置元件 之 用户自定义的变量--转载
    多态中成员函数的特点--转载
    Jmeter:cup监控、脚本录制、执行布置----转载
    Selenium JavascriptExecutor 详解
    selenium+java自动化测试环境搭建介绍--转载
    IO实时监控命令iostat详解-转载
  • 原文地址:https://www.cnblogs.com/-ccj/p/13614723.html
Copyright © 2020-2023  润新知