一、單個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范圍內起作用的異常處理(全局異常處理)
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 }
說明:
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 }
注意:
參考自: