首页

通过Spring的@ExceptionHandler拦截处理自定义异常并标准化结果返回

标签:ExceptionHandler,异常拦截,RestControllerAdvice     发布时间:2022-10-18   

一、定义全局接口异常处理的类

基于spring的org.springframework.web.bind.annotation.RestControllerAdvice 是全局接口异常处理GlobalExceptionHandlerAdvice类,当发生异常没有捕获时,@ExceptionHandler便标记自定义处理入口方法

 import com.louis.springboot.demo.entity.Result;@b@ import lombok.extern.slf4j.Slf4j;@b@import org.springframework.web.bind.annotation.ExceptionHandler;@b@import org.springframework.web.bind.annotation.RestControllerAdvice;@b@@b@@RestControllerAdvice@b@@Slf4j@b@public class GlobalExceptionHandlerAdvice extends DefaultGlobalExceptionHandlerAdvice {@b@@b@    @ExceptionHandler(value = {UserNotFoundException.class})@b@    public Result userNotFound(UserNotFoundException ex) {@b@        log.error(ex.getMessage());@b@        return Result.fail(ex.getErrorType());@b@    }@b@}

二、DefaultGlobalExceptionHandlerAdvice类 -用于处理通用基础异常

import com.louis.springboot.demo.entity.Result;@b@import lombok.extern.slf4j.Slf4j;@b@import org.springframework.dao.DuplicateKeyException;@b@import org.springframework.http.HttpStatus;@b@import org.springframework.web.bind.MethodArgumentNotValidException;@b@import org.springframework.web.bind.MissingServletRequestParameterException;@b@import org.springframework.web.bind.annotation.ExceptionHandler;@b@import org.springframework.web.bind.annotation.ResponseStatus;@b@import org.springframework.web.multipart.MultipartException;@b@ @b@@Slf4j@b@public class DefaultGlobalExceptionHandlerAdvice {@b@@b@    @ExceptionHandler(value = {MissingServletRequestParameterException.class})@b@    public Result missingServletRequestParameterException(MissingServletRequestParameterException ex) {@b@        log.error("missing servlet request parameter exception:{}", ex.getMessage());@b@        return Result.fail(SystemErrorType.ARGUMENT_NOT_VALID);@b@    }@b@@b@    @ExceptionHandler(value = {MultipartException.class})@b@    public Result uploadFileLimitException(MultipartException ex) {@b@        log.error("upload file size limit:{}", ex.getMessage());@b@        return Result.fail(SystemErrorType.UPLOAD_FILE_SIZE_LIMIT);@b@    }@b@@b@    @ExceptionHandler(value = {MethodArgumentNotValidException.class})@b@    public Result serviceException(MethodArgumentNotValidException ex) {@b@        log.error("service exception:{}", ex.getMessage());@b@        return Result.fail(SystemErrorType.ARGUMENT_NOT_VALID, ex.getBindingResult().getFieldError().getDefaultMessage());@b@    }@b@@b@    @ExceptionHandler(value = {DuplicateKeyException.class})@b@    public Result duplicateKeyException(DuplicateKeyException ex) {@b@        log.error("primary key duplication exception:{}", ex.getMessage());@b@        return Result.fail(SystemErrorType.DUPLICATE_PRIMARY_KEY);@b@    }@b@@b@    @ExceptionHandler(value = {BaseException.class})@b@    public Result baseException(BaseException ex) {@b@        log.error("base exception:{}", ex.getMessage());@b@        return Result.fail(ex.getErrorType());@b@    }@b@@b@    @ExceptionHandler(value = {Exception.class})@b@    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)@b@    public Result exception() {@b@        return Result.fail();@b@    }@b@@b@    @ExceptionHandler(value = {Throwable.class})@b@    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)@b@    public Result throwable() {@b@        return Result.fail();@b@    }@b@}

三、自定义异常UserNotFoundException

public class UserNotFoundException extends BaseException {@b@    public UserNotFoundException() {@b@        super(OrganizationErrorType.USER_NOT_FOUND);@b@    }@b@@b@    public UserNotFoundException(String message) {@b@        super(OrganizationErrorType.USER_NOT_FOUND, message);@b@    }@b@}

四、测试接口

import com.louis.springboot.demo.exception.UserNotFoundException;@b@import org.springframework.web.bind.annotation.GetMapping;@b@import org.springframework.web.bind.annotation.RestController;@b@@b@@RestController@b@public class HelloController { @b@@b@    @GetMapping("/throwUserNotFound")@b@    public void throwUserNotFound() {@b@        throw new UserNotFoundException("user not found ");@b@    }@b@    @b@}

访问http://localhost:8000/throwUserNotFound接口,浏览器结果如下

通过Spring的@ExceptionHandler拦截处理自定义异常并标准化结果返回

另外,完整项目demo下载

<<推荐下载>>
  • (1) 阿里巴巴Java开发手册8种不同版本
  • (2) Web前端开发视频教程
  • (3) 30+明星讲师PPT课件分享一线大厂架构实战经验
  • (4) java开发_架构篇_视频资源分享_v2208
  • (5) java开发_高级篇_视频资源分享_v2208
  • (6) java开发_进阶篇(中级)_视频资源分享_v2208
  • (7) java开发_入门篇_视频资源分享_v2208
  • (8) 微信小程序开发视频1+167源码+实战demo等下载
  • (9) easy-shopping电子商务java源码(附脚本和安装文档说明)下载
  • (10) java常用的72份知名实用的电子书下载
  • (11) java开发性能优化资料整理大全(8份电子文档+3份实战优化)下载
  • (12) 9个常用的算法设计资料和100以上视频课件内容下载
  • (13) vue开发必备常用手册16件下载
  • (14) 21种不同技术集群方案(es、flink、redis、nginx、zk、lvs、kafka、mysql、k8s等)参考资料下载
  • (15) 20种技术代码规范(js/java/dba/阿里/华为/oracle/mysql等)参考资料下载
  • (16) 微服务五套资料(0-1,架构设计,springcloud,nacos等)下载
  • (17) 架构师(28知识图谱+3套简历模板+6套架构实战文档等)完整资料整理下载
  • (18) 大数据18套实战基础知识+8套简历模板下载
  • (19) 并发编程全套(7套+阿里巴巴+亿级实战等)实战资料下载
  • (20) Kafka九套学习整理知识点全套(面试+笔记+代码api+命令+容备等)资料下载
  • (21) java全套9个不同方向类型的面试题(基础+核心+大厂+架构师+近万套题库等)下载
  • (22) JAVA开发常用API帮助文档大全(超52种以上技术资料,高手必备)下载
  • (23) springcloud超详细139件全套学习实战资料( 视频课件+源码demo+文档资料等)下载
  • 更多推荐>>
  • <<热门文章>>