spring boot的数据校验,通过全局异常处理

//2019/8/10  zjm@ControllerAdvice
public class ExceptionController {

    private final static Logger logger = LoggerFactory.getLogger(ExceptionController.class);

    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    @ResponseBody
    public FrontResponse validationBodyException(MethodArgumentNotValidException exception){
        BindingResult bindingResult = exception.getBindingResult();
        return getBindingResult(bindingResult);
    }

    @ExceptionHandler(value = BindException.class)
    @ResponseBody
    public FrontResponse validationBindException(BindException exception){
        BindingResult bindingResult = exception.getBindingResult();
        return getBindingResult(bindingResult);
    }

    private FrontResponse getBindingResult(BindingResult bindingResult){
        List<ObjectError> list = bindingResult.getAllErrors();
        StringBuilder builder = new StringBuilder();
        list.forEach(x -> {
                    FieldError error = (FieldError) x;
                    builder.append(error.getDefaultMessage());
                    builder.append("<br/>");
                }
        );
        return FrontResponse.fail(ErrorCodeDict.PARAMETER_INVALID.getCode(),builder.toString());
    }

    @ExceptionHandler(value = ConstraintViolationException.class)
    @ResponseBody
    public FrontResponse ConstraintViolationExceptionHandler(ConstraintViolationException exception) {
        Set<ConstraintViolation<?>> violations = exception.getConstraintViolations();
        StringBuilder builder = new StringBuilder();
        for (ConstraintViolation<?> item : violations) {
            builder.append(item.getMessage());
            builder.append("<br/>");
        }
        return FrontResponse.fail(ErrorCodeDict.PARAMETER_INVALID.getCode(),builder.toString());
    }

    @ExceptionHandler(value = HttpMessageConversionException.class)
    @ResponseBody
    public FrontResponse parameterTypeException(HttpMessageConversionException exception){
        return FrontResponse.fail(ErrorCodeDict.PARAMETER_INVALID.getCode(),"parameterTypeException");
    }

    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public FrontResponse handle(Exception e) {
        logger.error("系统异常", e);
        return FrontResponse.fail(ErrorCodeDict.SYSTEM_ERROR.getCode(),"system error");

    }

原文地址:https://www.cnblogs.com/zjm-1/p/12207019.html

时间: 2024-10-18 02:31:32

spring boot的数据校验,通过全局异常处理的相关文章

Spring Boot 2.X(十一):全局异常处理

前言 在 Java Web 系统开发中,不管是 Controller 层.Service 层还是 Dao 层,都有可能抛出异常.如果在每个方法中加上各种 try catch 的异常处理代码,那样会使代码非常繁琐.在Spring MVC 中,我们可以将所有类型的异常处理从各个单独的方法中解耦出来,进行异常信息的统一处理和维护. 在 Spring MVC 中全局异常捕获处理的解决方案通常有两种方式: 1.使用 @ControllerAdvice + @ExceptionHandler 注解进行全局的

spring-boot实战【07】【转】:Spring Boot中Web应用的统一异常处理

我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来展示异常内容. 选择一个之前实现过的Web应用(Chapter3-1-2)为基础,启动该应用,访问一个不存在的URL,或是修改处理内容,直接抛出异常,如: 1 2 3 4 @RequestMapping("/hello") public String hello() throws Exce

Spring Boot中Web应用的统一异常处理

我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来展示异常内容. 选择一个之前实现过的Web应用(Chapter3-1-2)为基础,启动该应用,访问一个不存在的URL,或是修改处理内容,直接抛出异常,如: 1 2 3 4 @RequestMapping("/hello") public String hello() throws Exce

Spring方法级别数据校验:@Validated + MethodValidationPostProcessor

每篇一句 在<深度工作>中作者提出这么一个公式:高质量产出=时间*专注度.所以高质量的产出不是靠时间熬出来的,而是效率为王 相关阅读 [小家Java]深入了解数据校验:Java Bean Validation 2.0(JSR303.JSR349.JSR380)Hibernate-Validation 6.x使用案例 [小家Java]深入了解数据校验(Bean Validation):基础类打点(ValidationProvider.ConstraintDescriptor.Constraint

Spring方法级别数据校验:@Validated

每篇一句 在<深度工作>中作者提出这么一个公式:高质量产出=时间*专注度.所以高质量的产出不是靠时间熬出来的,而是效率为王 相关阅读 [小家Java]深入了解数据校验:Java Bean Validation 2.0(JSR303.JSR349.JSR380)Hibernate-Validation 6.x使用案例[小家Java]深入了解数据校验(Bean Validation):基础类打点(ValidationProvider.ConstraintDescriptor.ConstraintV

Spring Boot 使用 Aop 实现日志全局拦截

前面的章节我们学习到 Spring Boot Log 日志使用教程 和 Spring Boot 异常处理与全局异常处理,本章我们结合 Aop 面向切面编程来实现全局拦截异常并记录日志. 在 Spring Boot 中 Aop 与 Ioc 可以说是 Spring 的灵魂,其功能也是非常强大. 1 新建 Spring Boot 项目 1)File > New > Project,如下图选择 Spring Initializr 然后点击 [Next]下一步 2)填写 GroupId(包名).Arti

【Spring学习笔记-MVC-10】Spring MVC之数据校验

作者:ssslinppp       1.准备 这里我们采用Hibernate-validator来进行验证,Hibernate-validator实现了JSR-303验证框架支持注解风格的验证.首先我们要到http://hibernate.org/validator/下载需要的jar包,这里以4.3.1.Final作为演示,解压后把hibernate-validator-4.3.1.Final.jar.jboss-logging-3.1.0.jar.validation-api-1.0.0.G

Spring Boot 的数据访问:JPA 和 MyBatis

JPA(Java Persistence API)是一个基于O/R映射(Object-Relational Mapping)的标准规范,主要实现包括Hibernate.EclipseLink和OpenJPA等. orm框架的本质是简化编程中操作数据库的编码[2],JPA 方便程序员不写sql语句,而 MyBatis 呢,则适合灵活调试动态sql. 本文梳理了springboot整合jpa和mybatis的大体过程,并给出了两个demo. 1 在docker环境下运行数据库 首先安装vmware虚

Spring Boot框架 - 数据访问 - 整合Mybatis

一.新建Spring Boot项目 注意:创建的时候勾选Mybatis依赖,pom文件如下 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> 二.配置文件applica