@RestControllerAdvice使用

目录

1.主要作用

2.判断异常的类型

3.实现


1.主要作用

@RestControllerAdvice主要用精简客户端返回异常,它可以捕获各种异常

2.判断异常的类型

1.后端数据校验异常

2.未授权异常

3.自定义异常

4.普通异常

3.实现

未优化前

import com.qing.emos.wx.exception.EmosException;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.UnauthorizedException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.*;

@Slf4j
//@RestControllerAdvice可以捕获SpringMVC异常
@RestControllerAdvice
public class ExceptionAdvice {

    @ResponseBody
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
//    ExceptionHandler用于全局捕获异常
    @ExceptionHandler(Exception.class)
    public String validExcepionHandler(Exception e){
        log.error("执行异常",e);
//        后端验证失败的异常,参数没传,或者传的不对
        if(e instanceof MethodArgumentNotValidException){
            MethodArgumentNotValidException exception = (MethodArgumentNotValidException) e;
            return exception.getBindingResult().getFieldError().getDefaultMessage();
        }
//        精简异常的内容,EmosException为自己定义异常
        else if(e instanceof EmosException){
            EmosException exception = (EmosException) e;
            return  exception.getMsg();
        }
//        未授权异常
        else if(e instanceof UnauthorizedException){
            return "你不具备相关权限";
        }
//       普通异常
        else {
            return "后端执行异常";
        }
    }
}

优化后

@RestControllerAdvice是Spring框架中的一个注解,用于定义全局异常处理器和全局数据绑定。通过使用@RestControllerAdvice注解,我们可以将异常处理和数据绑定逻辑集中在一个类中,方便统一管理和维护。 使用@RestControllerAdvice的步骤如下: 1. 创建一个类,并使用@RestControllerAdvice注解进行标注。 2. 在该类中定义异常处理方法,使用@ExceptionHandler注解进行标注。异常处理方法可以处理特定类型的异常,也可以处理所有类型的异常。 3. 在异常处理方法中编写具体的异常处理逻辑,例如返回自定义的错误信息、记录日志等。 4. 可选地,在该类中定义全局数据绑定方法,使用@ModelAttribute注解进行标注。全局数据绑定方法可以在每个请求处理方法执行之前,将一些公共数据绑定到模型中,方便在视图中使用。 下面是一个使用@RestControllerAdvice的示例: ```java @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity<String> handleException(Exception e) { // 处理异常逻辑 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal Server Error"); } @ModelAttribute public void addCommonAttributes(Model model) { // 全局数据绑定逻辑 model.addAttribute("appName", "MyApp"); } } ``` 在上述示例中,我们定义了一个全局异常处理器和一个全局数据绑定方法。handleException方法用于处理所有类型的异常,并返回一个包含错误信息的ResponseEntity对象。addCommonAttributes方法用于将一个名为"appName"的属性绑定到模型中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值