说明:

 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 }

其次、全体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 }
 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范围的好处理

1、全局非凡处理接近

  • 以controller中入被@ExceptionHandler修饰的好像即可(在拖欠声明中指定该方法需要处理的这一个大类)
  • 拖欠老处理办法就于当下的controller中起功效

参考自:

说明:

注意:

2、controller

  • @ControllerAdvice是controller的一个援助类,最常用的就是当全局非常处理的切面类
  • @ControllerAdvice可以指定扫描范围
  • @ControllerAdvice约定了两种植有效的归来值,假设是平昔回到model类的说话,需要动用@ResponseBody举行json转换
    • 重返String,表示过到某某view
    • 返回modelAndView
    • 返回model + @ResponseBody

相关文章

网站地图xml地图