天天看點

14.全局異常處理

1.全局異常簡介

Web應用請求處理過程中時常會發生異常,當發生異常時,需要通過一個統一的異常處理來保證用戶端能夠收到友好的提示。

2.全局異常類開發

複制一份“內建MyBatis”的項目代碼,修改項目名稱為globalexception。然後在項目目錄“/src/main/java/com/leichuangkj/globalexception/common”下建立GlobalExceptionHandler類,具體代碼如下。

@ControllerAdvice
public class GlobalExceptionHandler {
    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public ServerResponse errorHandler(HttpServletRequest req, Exception e) throws Exception {
        logger.error("{} exception",req.getRequestURI(),e);
        return ServerResponse.createByErrorCodeMessageData(ResponseCode.ERROR.getCode(),"接口異常,詳情請檢視服務端日志!",e.toString());
    }
}      
  • @ControllerAdvice:定義統一的異常類,可通過basepackages屬性自定義需要掃描的包。
  • @ExceptionHandler:定義函數的異常類型,可傳入多個需要捕獲的異常類。
  • @ResponseBody:傳回json格式的資料。

3.在UserController類中添加會産生異常的代碼

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    UserImpl userImpl;

    @RequestMapping(value = "/findByName",method = RequestMethod.POST)
    @ResponseBody
    public ServerResponse findByName(@RequestBody User user){
        int rs = 1/0;
        return userImpl.findByName(user.getName());
    }
}      

4.啟動項目

在啟動類GlobalexceptionApplication上添加注解“@MapperScan(basePackages = “com.leichuangkj.globalexception.dao.mapper”)”,然後啟動項目。

@MapperScan(basePackages = "com.leichuangkj.globalexception.dao.mapper")
@SpringBootApplication
public class GlobalexceptionApplication {
  public static void main(String[] args) {
    SpringApplication.run(GlobalexceptionApplication.class, args);
  }
}      

5.測試

啟動項目,然後在postman中請求“http://localhost:8080/user/findByName”,可以查詢到相應的資訊,測試結果如下圖所示。

14.全局異常處理