全局异常捕捉用法解析

简介

  通过@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;
}
原文地址:https://www.cnblogs.com/donghang/p/9233653.html