全局異常捕捉用法解析


簡介

  通過@ControllerAdvice注解可以將對於控制器的全局配置放在同一個位置。
  注解了@Controller的類的方法可以使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上。
  @ControllerAdvice注解將作用在所有注解了@RequestMapping的控制器的方法上
  @ExceptionHandler:用於全局處理控制器里的異常。

用法

@ControllerAdvice
@ResponseBody
public class BusinessExceptionHandler {
	@ExceptionHandler(value = Exception.class)
	public JsonBackData exceptionHandler(HttpServletRequest request, Exception e) {
		e.printStackTrace();
		JsonBackData back = new JsonBackData();
		if (e instanceof BusinessException) {
			BusinessException ex = (BusinessException) e;
			back.setSuccess(false);
			back.setBackMsg(ex.getMessage());
		}
		return back;
	}

  加了這個全局配置的Bean后,以前我的代碼是這樣的:

	@RequestMapping(value = "queryDetail")
	@ResponseBody
	public JsonBackData queryDetail(@RequestParam String id) {
		JsonBackData back = new JsonBackData();
		try {
			OpenSourceThrottleAdjustVO vo = openSourceThrottlePlanQueryService.findById(id);
			back.setBackData(vo);
			back.setSuccess(true);
			back.setBackMsg("查詢詳細信息成功");
		} catch (BusinessException e) {
			back.setSuccess(false);
			back.setBackMsg("查詢詳細信息失敗:" + e.getMessage());
		}
		return back;
	}

 多了很多無關信息。幾乎每個類都要try catch一下,代碼極度冗余。
但是加了上面的全局處理控制器的異常處理后。代碼就變成了下面的了。

@RequestMapping(value = "queryDetail")
@ResponseBody
public JsonBackData queryDetail(@RequestParam String id) {
	JsonBackData back = new JsonBackData();
	OpenSourceThrottleAdjustVO vo = openSourceThrottlePlanQueryService.findById(id);
	back.setBackData(vo);
	back.setSuccess(true);
	back.setBackMsg("查詢詳細信息成功");
	return back;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM