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

 3. debug打断点 发现 公司引用的包 已经定义了全局异常处理,返回的实体类默认 就是 0 success  

 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 exceptionHandler(Exception ex){
        ApiResponse apiResponse = new ApiResponse<>();
        apiResponse.setStatus(1);
        apiResponse.setStatusText(ex.getMessage());
        return apiResponse;
    }
  
}

5.order注解的理解

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

 

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

 

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

       

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
Bing Webmaster Portal Back     此页面的语言为中文(简体)   翻译为        
  • 中文(简体)
  • 中文(繁体)
  • 丹麦语
  • 乌克兰语
  • 乌尔都语
  • 亚美尼亚语
  • 俄语
  • 保加利亚语
  • 克罗地亚语
  • 冰岛语
  • 加泰罗尼亚语
  • 匈牙利语
  • 卡纳达语
  • 印地语
  • 印尼语
  • 古吉拉特语
  • 哈萨克语
  • 土耳其语
  • 威尔士语
  • 孟加拉语
  • 尼泊尔语
  • 布尔语(南非荷兰语)
  • 希伯来语
  • 希腊语
  • 库尔德语
  • 德语
  • 意大利语
  • 拉脱维亚语
  • 挪威语
  • 捷克语
  • 斯洛伐克语
  • 斯洛文尼亚语
  • 旁遮普语
  • 日语
  • 普什图语
  • 毛利语
  • 法语
  • 波兰语
  • 波斯语
  • 泰卢固语
  • 泰米尔语
  • 泰语
  • 海地克里奥尔语
  • 爱沙尼亚语
  • 瑞典语
  • 立陶宛语
  • 缅甸语
  • 罗马尼亚语
  • 老挝语
  • 芬兰语
  • 英语
  • 荷兰语
  • 萨摩亚语
  • 葡萄牙语
  • 西班牙语
  • 越南语
  • 阿塞拜疆语
  • 阿姆哈拉语
  • 阿尔巴尼亚语
  • 阿拉伯语
  • 韩语
  • 马尔加什语
  • 马拉地语
  • 马拉雅拉姆语
  • 马来语
  • 马耳他语
  • 高棉语