Spring 注解学习手札(八)补遗——@ExceptionHandler

Spring注解,改变了我的开发思路。前段时间,用 @RequestBody@ResponseBody,不费吹灰之力就解决了JSon自动绑定。接着就发现,如果遇到 RuntimeException,需要给出一个默认返回JSON。

以前都是用 SimpleMappingExceptionResolver拦截实现,今天偶尔看下资料, @ExceptionHandler,就把这个异常给拦截了,太方便了!

相关参考:
Spring 注解学习手札(一) 构建简单Web应用
Spring 注解学习手札(二) 控制层梳理
Spring 注解学习手札(三) 表单页面处理
Spring 注解学习手札(四) 持久层浅析
Spring 注解学习手札(五) 业务层事务处理
Spring 注解学习手札(六) 测试
Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
Spring 注解学习手札(八) 补遗——@ExceptionHandler



直接上代码:
@Controller
public class AccessController {

	/**
	 * 异常页面控制
	 * 
	 * @param runtimeException
	 * @return
	 */
	@ExceptionHandler(RuntimeException.class)
	public @ResponseBody
	Map<String,Object> runtimeExceptionHandler(RuntimeException runtimeException) {
		logger.error(runtimeException.getLocalizedMessage());

		Map model = new TreeMap();
		model.put("status", false);
		return model;
	}

}


当这个Controller中任何一个方法发生异常,一定会被这个方法拦截到。然后,输出日志。封装Map并返回,页面上得到status为false。就这么简单。

或者这个有些有些复杂,来个简单易懂的,上代码:
@Controller
public class AccessController {
	/**
	 * 异常页面控制
	 * 
	 * @param runtimeException
	 * @return
	 */
	@ExceptionHandler(RuntimeException.class)
	public String runtimeExceptionHandler(RuntimeException runtimeException,
			ModelMap modelMap) {
		logger.error(runtimeException.getLocalizedMessage());

		modelMap.put("status", IntegralConstant.FAIL_STATUS);
		return "exception";
	}
}


相关参考:
Spring 注解学习手札(一) 构建简单Web应用
Spring 注解学习手札(二) 控制层梳理
Spring 注解学习手札(三) 表单页面处理
Spring 注解学习手札(四) 持久层浅析
Spring 注解学习手札(五) 业务层事务处理
Spring 注解学习手札(六) 测试
Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
Spring 注解学习手札(八) 补遗——@ExceptionHandler

你可能感兴趣的:(spring)