码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-09-17 13:18:23      阅读:29      评论:0      收藏:0      [点我收藏+]

标签:inter   loading   ORC   cep   res   except   null   nat   alt   

由于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

 

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

标签:inter   loading   ORC   cep   res   except   null   nat   alt   

原文地址:https://www.cnblogs.com/-ccj/p/13614723.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!