zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    禁用网络连接后无法访问本机数据库的问题
    DevExpress使用笔记
    DEV控件 皮肤问题
    SQLServer2008导入Excel遇到的问题
    InnoSetup使用笔记
    SQLServer清空数据库中所有表的数据
    MS SQL Server2000转换成MySQL
    由MySQL登录不了引发的一些问题
    onerror事件
    DIV+CSS一些小小的技巧
  • 原文地址:https://www.cnblogs.com/-ccj/p/13614723.html
Copyright © 2011-2022 走看看