SpingBoot中的全局异常捕捉

        在开发中我们都会遇到产生异常情况,如果直接将异常反馈给用户,就会大大的降低用户的体验效果,这里就出现了异常的捕捉,一般用try{

                       }catch(){

                       }

        对异常进行捕捉,但当出现很多类中都需要有异常捕捉,或者说有很多异常需要捕捉时,代码的美观性就会大大的降低,这里就出现了全局的异常捕捉,只需要在出现异常的地方,将异常抛出,一直往上级抛,抛到最后的异常类再进行捕捉,这样大大的提升了代码的美观性,和代码的简洁性

这里,我给大家分享一种我认为很好用的异常捕捉。

先给大家写上开发的步骤

1、创建异常类BaseException(该类中建立需要抛出异常类型和传参数的构造方法,根据不同的参数来抛出不同的异常信息),该类需要继承Exception类

2、在controller层中新建一个异常通知类ControllerAdvice(俗称异常捕捉类),为该类添加@ControllerAdvice的注解(该注解定义于@ExceptionHandler,@InitBinder,@ModelAttribute,也可应用与所有的@RequestMapping中,是spring3.2中新添加的注解,功能非常强大)

3、在ControllerAdvice类中写异常处理的方法,方法中需额外添加@ExceptionHandlez注解,这样就能被@ControllerAdvice注解所识别,知道是异常处理的方法啦

4、最后在想要处理异常的地方进行异常的抛出

现在上异常类的代码

public class BaseException extends Exception{
	private static final long serialVersionUID = 1L;
	private String code;
	private String message;


  public BaseException(String code, String message) {
		super(message);
		this.code = code;
		this.message = message;
  }
  public BaseException(String message) {
		super(message);
		this.message = message;
  }


  public String getCode() {
    return code;
  }

  public void setCode(String code) {
    this.code = code;
  }

  @Override
  public String getMessage() {
    return message;
  }

  public void setMessage(String message) {
    this.message = message;
  }

}

这里写异常捕捉类ControllerAdvice

@ControllerAdvice
public class AdviceController {
	
    private final static Logger logger = LoggerFactory.getLogger(AdviceController.class);	
	
    @ResponseBody
    @ExceptionHandler(Exception.class)
    public Object processRuntimeException(Exception e) {
        if(e instanceof BaseException){
        	logger.error("ERROR", e);
        	return ReturnUtil.busError(((BaseException)e).getErrorMsg());
        }else if(e instanceof HttpMessageNotReadableException){
        	logger.error("ERROR", e);
        	return ReturnUtil.busError(e.getMessage());
        }
        else{
        	logger.error("system error", e);
        	return ReturnUtil.sysError("system error");
        }
    }
	
}

最后上抛出异常的代码块

  throw new BaseException("这里填写异常信息");


  throw new BaseException("这里填写错误编码","这里填写异常信息");

好了,到这里就大功告成了,祝愿各位小猿猿工作一切顺利

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Spring Boot ,可以使用@ControllerAdvice注解来实现全局异常处理。你可以创建一个类,使用@ControllerAdvice注解标注该类,并在类定义一个方法,使用@ExceptionHandler注解来捕获所有的异常。例如: ```java @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) @ResponseBody public String handleException(Exception e) { return "发生异常:" + e.getMessage(); } } ``` 在上面的代码,我们定义了一个GlobalExceptionHandler类,并在类上使用@ControllerAdvice注解来标注该类,表示这是一个全局异常处理类。然后,在类,我们定义了一个handleException方法,使用@ExceptionHandler注解来捕获所有的异常,并使用@ResponseBody注解来将方法的返回值转换为JSON格式的字符串。 如果你的全局异常处理没有生效,有可能是因为你没有将该类扫描到Spring容器。你可以在Spring Boot的启动类上使用@ComponentScan注解或者@SpringBootApplication注解来扫描该类。例如: ```java @SpringBootApplication @ComponentScan(basePackages = {"com.example.demo"}) public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 在上面的代码,我们在@SpringBootApplication注解上使用@ComponentScan注解来扫描com.example.demo包下的所有类,包括GlobalExceptionHandler类。这样,Spring容器就会自动将GlobalExceptionHandler类加载到容器,并且生效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值