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”,可以查詢到相應的資訊,測試結果如下圖所示。