springboot 处理异常类存在两个 配置其优先级Order

1.背景:公司框架 做了全局异常处理,如当前接口定义请求方式是POST,但在调用的时候却使用 GET

  后台:

Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported]

   postman:

{
    "timestamp": "2022-04-02T06:35:53.646+00:00",
    "status": 405,
    "error": "Method Not Allowed",
    "message": "",
    "path": "/sendMessage"
}

  公司框架返回:

{"status":0,"statusText":"Success","data":null}

  1.2 问题出在 明明这个接口报错 ,返回的却是success 得重新处理一下这种异常

 

 2.参考

  2.1 SpringBoot中REST API的错误异常处理设计  

      2.2 Spring Boot Web: 自定义Method Not Allowed响应

      2.3 SpringBoot中这样定义全局异常处理器Global Exception Handler

 

 

 4.解决方案 代码中写一个异常处理类,并设置其优先级 

package ins.business.common.exception;

import ins.framework.web.ApiResponse;
import ins.framework.web.advice.GlobalExceptionHandler;
import org.springframework.core.annotation.Order;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

/**
 * 自定义异常
 */
@ControllerAdvice
@Order(1)
public class MyControllerAdvice {
    @ResponseBody
    @ExceptionHandler(value = Exception.class)
    public ApiResponse<String> exceptionHandler(Exception ex){
        ApiResponse<String> apiResponse = new ApiResponse<>();
        apiResponse.setStatus(1);
        apiResponse.setStatusText(ex.getMessage());
        return apiResponse;
    }
  
}

 

5.order注解的理解

  order注解 主要用来控制配置类的加载顺序:数字越小,越先加载

 

 常用注解使用总结系列: @Order 注解

 短信平台 项目启动 加载配置信息到redis 的时候 使用 order注解:实现ApplicationRunner接口,执行顺序按照value值决定,值小先执行

 

6.设置Oder最高优先级代码

//最高优先级
@Order(Ordered.HIGHEST_PRECEDENCE)

 

 

 

 

 

 

 

 

 

 

 

 
 
posted @ 2022-04-02 14:40  BBS_自律  阅读(595)  评论(0)    收藏  举报