Spring 注解学习@ExceptionHandler 和@ResponseStatus

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

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

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



直接上代码: 
Java代码   收藏代码
  1. @Controller  
  2. public class AccessController {  
  3.   
  4.     /** 
  5.      * 异常页面控制 
  6.      *  
  7.      * @param runtimeException 
  8.      * @return 
  9.      */  
  10.     @ExceptionHandler(RuntimeException.class)  
  11.     public @ResponseBody  
  12.     Map<String,Object> runtimeExceptionHandler(RuntimeException runtimeException) {  
  13.         logger.error(runtimeException.getLocalizedMessage());  
  14.   
  15.         Map model = new TreeMap();  
  16.         model.put("status"false);  
  17.         return model;  
  18.     }  
  19.   
  20. }  


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

或者这个有些有些复杂,来个简单易懂的,上代码: 
Java代码   收藏代码
  1. @Controller  
  2. public class AccessController {  
  3.     /** 
  4.      * 异常页面控制 
  5.      *  
  6.      * @param runtimeException 
  7.      * @return 
  8.      */  
  9.     @ExceptionHandler(RuntimeException.class)
  10.     @ResponseStatus(value="400")
  11.     public String runtimeExceptionHandler(RuntimeException runtimeException,  
  12.             ModelMap modelMap) {  
  13.         logger.error(runtimeException.getLocalizedMessage());  
  14.   
  15.         modelMap.put("status", IntegralConstant.FAIL_STATUS);  
  16.         return "exception";  
  17.     }  
  18. }  
 @ResponseStatus 设定controller返回的状态码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
抱歉,我无法直接提供CSDN的代码。但是,我可以向你解释一下`@ExceptionHandler`注解Spring框架中的使用。 `@ExceptionHandler`注解用于处理控制器中的异常。它通常与`@ControllerAdvice`注解一起使用,将异常处理逻辑集中在一个单独的类中,从而避免在每个控制器中重复编写异常处理代码。 下面是一个简单的示例代码,展示了`@ExceptionHandler`注解的用法: ```java @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity<String> handleException(Exception ex) { // 异常处理逻辑 return new ResponseEntity<>("Internal Server Error", HttpStatus.INTERNAL_SERVER_ERROR); } @ExceptionHandler(CustomException.class) public ResponseEntity<String> handleCustomException(CustomException ex) { // 自定义异常处理逻辑 return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST); } // 其他异常处理方法... } ``` 在上述示例中,`GlobalExceptionHandler`类使用`@ControllerAdvice`注解标记为全局异常处理器。它包含了两个带有`@ExceptionHandler`注解的方法,分别用于处理`Exception`类型和自定义的`CustomException`类型的异常。 当控制器中抛出异常时,Spring框架会根据异常类型选择合适的异常处理方法进行处理。处理方法可以根据需要返回不同的响应结果或执行其他逻辑。 请注意,上述示例只是一个简单的演示,实际使用中可能会根据具体需求进行定制和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值