SpringBoot全局异常捕获参数以及参数异常的解决方案

 更新时间:2025年05月09日 08:54:27   作者:小杨同学~  
这篇文章主要介绍了SpringBoot全局异常捕获参数以及参数异常的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

现在比较常用的方式是给前端返回JSON,但是有些时候程序出现一些异常,导致前端页面报错不是很友好,所以就需要对项目进行全局的异常捕获,返回给前端固定的格式,进行友好的处理!

话不多说,开始写代码

一.全局异常捕获

1.1 全局捕获

@Slf4j
@RestControllerAdvice(annotations = {RestController.class})
public class BaseExceptionHandler {

    /**
     * <p>
     *       全局Base异常处理
     * </p>
     * @version 1.0.0
     * @author Dylan
     * @since 2020/2/27
     * @param e
     */
    @ExceptionHandler({BaseException.class,BusinessException.class})
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public R customExceptionHandler(BaseException e) {
        sysLog();
        log.info("自定义异常 ---> {}",e);
        return R.error(e.getCode(),e.getMsg());
    }

    /**
     * <p>
     *       其他类型的异常处理
     * </p>
     * @version 1.0.0
     * @author Dylan
     * @since 2020/2/27
     * @param e
     */
    @ExceptionHandler({Exception.class})
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public R customExceptionHandler(Exception e) {
        sysLog();
        log.info("未知的运行异常 ---> ",e);
        return R.error();
    }

    /**
     * <p>
     *       参数异常处理
     * </p>
     * @version 1.0.0
     * @author Dylan-haiji
     * @since 2020/2/28
     * @param exception
     */
    @ExceptionHandler(value= MethodArgumentNotValidException.class)
    public R methodNotValidHandler(MethodArgumentNotValidException exception) {
        sysLog();
        log.info("参数异常 ---> ",exception);
        List<FieldError> fieldErrors = exception.getBindingResult().getFieldErrors();
        return  R.error(fieldErrors.get(0).getDefaultMessage());
    }

    /**
     * <p>
     *       统一日志输出
     * </p>
     * @version 1.0.0
     * @author Dylan-haiji
     * @since 2020/2/28
     * @param
     * @return void
     */
    private void sysLog(){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String requestUri = request.getRequestURI();
        log.info("异常  method ---> {}",request.getMethod());
        log.info("异常 requestURI ---> {}",requestUri);
    }
    
}

1.2 基础异常

public class BaseException extends RuntimeException{
    private Integer code;
    private String msg;

    public BaseException(Integer code, String msg){
        this.code = code;
        this.msg = msg;
    }

    public BaseException( String msg){
        this.code = 500;
        this.msg = msg;
    }

}

1.3 业务参数异常

public class BusinessException extends BaseException {

    public BusinessException(Integer code, String msg) {
        super(code, msg);
    }

    public BusinessException() {
        super(ConstantUtils.BUSINESS_DATA);
    }

    public BusinessException(String msg) {
        super(msg);
    }

}

二.验证

通过上面的配置,我们可以进行全局的异常捕获,接下来我们以参数验证为例进行验证是否可用!

2.1 定义实体类

public class Demo implements Serializable {
    
    @NotBlank(message = "请选择时间")
    private String endDate;
   
    @NotBlank(message = "请选择范围类型")
    private String value;

}

2.2 定义接口

 @PostMapping(value = "list")
 public R getOverView(@RequestBody @Valid Demo demo){
    return R.ok();
 }

这是我们调用接口,直传一个参数!达到了我们的预期效果

当然我们处理业务的时候也可进行异常的抛出,这样也会进行全局的捕获!

这样的接口返回就非常的友好了! 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java如何实现远程文件下载到本地目录

    Java如何实现远程文件下载到本地目录

    本文介绍了如何使用Java来实现远程文件的下载功能,主要通过HTTPS路径下载文件到本地目录,详细介绍了相关代码和测试步骤,并提供了实际案例供参考,本文旨在帮助需要实现文件下载功能的开发者快速掌握核心技术
    2024-10-10
  • Spring Boot Test详解

    Spring Boot Test详解

    Spring Test与JUnit等其他测试框架结合起来,提供了便捷高效的测试手段,而Spring Boot Test 是在Spring Test之上的再次封装,增加了切片测试,增强了mock能力,这篇文章主要介绍了Spring Boot Test介绍,需要的朋友可以参考下
    2024-02-02
  • Java Arrays.fill()的具体使用

    Java Arrays.fill()的具体使用

    本文主要介绍了Java Arrays.fill()的具体使用,更好地理解Arrays.fill()方法的用法以及在实际应用中如何使用它,感兴趣的可以了解一下
    2023-09-09
  • 使用String转换到Map结构

    使用String转换到Map结构

    这篇文章主要介绍了使用String转换到Map结构,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java内部类的继承(全)

    Java内部类的继承(全)

    这篇文章主要介绍了Java内部类的继承,大家都知道JAVA内部类的构造器必须连接指向其外围类对象的引用,所以在继承内部类的时候,需要在导出类的构造器中手动加入对基类构造器的调用,需要的朋友可以参考下
    2015-07-07
  • Java并发LinkedBlockingQueue源码分析

    Java并发LinkedBlockingQueue源码分析

    这篇文章主要为大家介绍了Java并发LinkedBlockingQueue源码分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Java struts2 package元素配置及实例解析

    Java struts2 package元素配置及实例解析

    这篇文章主要介绍了Java struts2 package元素配置及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • SpringBoot连接MySql数据库的原理及代码示例

    SpringBoot连接MySql数据库的原理及代码示例

    SpringBoot是一款流行的Java开发框架,它可以轻松地连接各种类型的数据库,包括关系型数据库和非关系型数据库,本文将介绍SpringBoot是如何连接数据库的,包括其原理和代码示例,需要的朋友可以参考下
    2023-07-07
  • JavaWeb 获取应用根路径的实践指南

    JavaWeb 获取应用根路径的实践指南

    本文全面介绍JavaWeb中获取应用根路径的多种方法,涵盖Servlet、JSP、SpringBoot等场景,强调相对路径与物理路径的合理使用及安全性验证,确保不同环境下的路径处理一致性和正确性,感兴趣的朋友一起看看吧
    2025-08-08
  • Spring容器-BeanFactory和ApplicationContext使用详解

    Spring容器-BeanFactory和ApplicationContext使用详解

    这篇文章主要为大家介绍了Spring容器-BeanFactory和ApplicationContext的使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04

最新评论