Spring注解,改变了我的开发思路。前段时间,用
@RequestBody
,
@ResponseBody
,不费吹灰之力就解决了JSon自动绑定。接着就发现,如果遇到
RuntimeException
,需要给出一个默认返回JSON。
当这个Controller中任何一个方法发生异常,一定会被这个方法拦截到。然后,输出日志。封装Map并返回,页面上得到status为false。就这么简单。
或者这个有些有些复杂,来个简单易懂的,上代码:
以前都是用SimpleMappingExceptionResolver拦截实现,今天偶尔看下资料,@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)
- @ResponseStatus(value="400")
- public String runtimeExceptionHandler(RuntimeException runtimeException,
- ModelMap modelMap) {
- logger.error(runtimeException.getLocalizedMessage());
- modelMap.put("status", IntegralConstant.FAIL_STATUS);
- return "exception";
- }
- }
@ResponseStatus 设定controller返回的状态码