码迷,mamicode.com
首页 > 编程语言 > 详细

第二十三章 springboot + 全局异常处理

时间:2016-08-13 22:36:07      阅读:376      评论:0      收藏:0      [点我收藏+]

标签:

一、单个controller范围的异常处理

 1 package com.xxx.secondboot.web;
 2 
 3 import org.springframework.web.bind.annotation.ExceptionHandler;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RequestMethod;
 6 import org.springframework.web.bind.annotation.RestController;
 7 
 8 import com.xxx.secondboot.exception.MyExceptionResponse;
 9 
10 import io.swagger.annotations.Api;
11 
12 @Api("测试controllerAdvice和全局异常处理")
13 @RestController
14 @RequestMapping("/advice1")
15 public class AdviceController {
16 
17     @RequestMapping(value = "/test1", method = RequestMethod.GET)
18     public String test1() {
19         throw new RuntimeException("advice1 - exception1");
20     }
21 
22     @RequestMapping(value = "/test2", method = RequestMethod.GET)
23     public String test2() {
24         throw new RuntimeException("advice1 - exception2");
25     }
26 
27     @ExceptionHandler(RuntimeException.class)
28     public MyExceptionResponse exceptionHandler() {
29         MyExceptionResponse resp = new MyExceptionResponse();
30         resp.setCode(300);
31         resp.setMsg("exception-Handler");
32         return resp;
33     }
34 
35 }

说明:

  • 在controller中加入被@ExceptionHandler修饰的类即可(在该注解中指定该方法需要处理的那些异常类)
  • 该异常处理方法只在当前的controller中起作用

二、全部controller范围内起作用的异常处理(全局异常处理)

1、全局异常处理类

 1 package com.xxx.secondboot.web;
 2 
 3 import javax.servlet.http.HttpServletResponse;
 4 
 5 import org.springframework.web.bind.annotation.ControllerAdvice;
 6 import org.springframework.web.bind.annotation.ExceptionHandler;
 7 import org.springframework.web.bind.annotation.ResponseBody;
 8 import org.springframework.web.bind.annotation.RestController;
 9 
10 import com.xxx.secondboot.exception.MyExceptionResponse;
11 import com.xxx.secondboot.exception.MyRuntimeException;
12 
13 //@ControllerAdvice(annotations=RestController.class)
14 //@ControllerAdvice(basePackages={"com.xxx","com.ooo"})
15 @ControllerAdvice
16 public class GlobalExceptionHandler {
17     @ExceptionHandler(RuntimeException.class)
18     //    @ExceptionHandler(value={RuntimeException.class,MyRuntimeException.class})
19     //    @ExceptionHandler//处理所有异常
20     @ResponseBody //在返回自定义相应类的情况下必须有,这是@ControllerAdvice注解的规定
21     public MyExceptionResponse exceptionHandler(RuntimeException e, HttpServletResponse response) {
22         MyExceptionResponse resp = new MyExceptionResponse();
23         resp.setCode(300);
24         resp.setMsg("exception-Handler");
25         //        response.setStatus(600);
26         return resp;
27     }
28 }

说明:

  • @ControllerAdvice是controller的一个辅助类,最常用的就是作为全局异常处理的切面类
  • @ControllerAdvice可以指定扫描范围
  • @ControllerAdvice约定了几种可行的返回值,如果是直接返回model类的话,需要使用@ResponseBody进行json转换

2、controller

 1 package com.xxx.secondboot.web;
 2 
 3 import org.springframework.web.bind.annotation.RequestMapping;
 4 import org.springframework.web.bind.annotation.RequestMethod;
 5 import org.springframework.web.bind.annotation.RestController;
 6 
 7 import io.swagger.annotations.Api;
 8 
 9 @Api("测试controllerAdvice和全局异常处理")
10 @RestController
11 @RequestMapping("/advice1")
12 public class AdviceController {
13 
14     @RequestMapping(value = "/test1", method = RequestMethod.GET)
15     public String test1() {
16         throw new RuntimeException("advice1 - exception1");
17     }
18 
19     @RequestMapping(value = "/test2", method = RequestMethod.GET)
20     public String test2() {
21         throw new RuntimeException("advice1 - exception2");
22     }
23 
24     //    @ExceptionHandler(RuntimeException.class)
25     //    public MyExceptionResponse exceptionHandler() {
26     //        MyExceptionResponse resp = new MyExceptionResponse();
27     //        resp.setCode(300);
28     //        resp.setMsg("exception-Handler");
29     //        return resp;
30     //    }
31 
32 }

 

第二十三章 springboot + 全局异常处理

标签:

原文地址:http://www.cnblogs.com/java-zhao/p/5769018.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!