第一种:使用@ControllerAdvice和@ExceptionHandler注解
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
@Slf4j [/b] @ControllerAdvice public class GlobalExceptionHandler { @ResponseBody @ExceptionHandler (NullPointerException. class ) public BaseResult globalException(HttpServletResponse response,NullPointerException ex){ log.info( "GlobalExceptionHandler..." ); log.info( "错误代码:" + response.getStatus()); BaseResult result = new WebResult(WebResult.RESULT_FAIL, "request error:" +response.getStatus() , "GlobalExceptionHandler:" +ex.getMessage()); return result; } } |
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
@Target ({ElementType.TYPE}) @Retention (RetentionPolicy.RUNTIME) @Documented @Component public @interface ControllerAdvice { @AliasFor ( "basePackages" ) String[] value() default {}; @AliasFor ( "value" ) String[] basePackages() default {}; Class<?>[] basePackageClasses() default {}; Class<?>[] assignableTypes() default {}; Class<? extends Annotation>[] annotations() default {}; } |
1
2
3
4
5
6
|
@Target ({ElementType.METHOD}) @Retention (RetentionPolicy.RUNTIME) @Documented public @interface ExceptionHandler { Class<? extends Throwable>[] value() default {}; } |
第二种: 使用ErrorController类来实现。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
@Slf4j @RestController public class HttpErrorController implements ErrorController { private final static String ERROR_PATH = "/error" ; @ResponseBody @RequestMapping (path = ERROR_PATH ) public BaseResult error(HttpServletRequest request, HttpServletResponse response){ log.info( "访问/error" + " 错误代码:" + response.getStatus()); BaseResult result = new WebResult(WebResult.RESULT_FAIL, "HttpErrorController error:" +response.getStatus()); return result; } @Override public String getErrorPath() { return ERROR_PATH; } } |
测试
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
package com.microblog.common.result; import java.io.Serializable; public class BaseResult implements Serializable { private static final long serialVersionUID = 1L; public static final int RESULT_FAIL = 0 ; public static final int RESULT_SUCCESS = 1 ; //返回代码 private Integer code; //返回消息 private String message; //返回对象 private Object data; public BaseResult(Integer code, String message) { this .code = code; this .message = message; } public BaseResult(Integer code, String message, Object object) { this .code = code; this .message = message; this .data = object; } public Integer getCode() { return code; } public void setCode(Integer code) { this .code = code; } public String getMessage() { return message; } public void setMessage(String message) { this .message = message; } public Object getData() { return data; } public void setData(Object data) { this .data = data; } } |
01
02
03
04
05
06
07
08
09
10
11
12
13
|
@Slf4j @RestController @RequestMapping ( "/user" ) public class TestController { @RequestMapping ( "/info1" ) public String test(){ log.info( "/user/info1" ); throw new NullPointerException( "TestController have exception" ); } } |
1
|
{ "code" : 0 , "message" : "HttpErrorController error:404" , "data" : null } |
1
|
{ "code" : 0 , "message" : "request error:200" , "data" : "GlobalExceptionHandler:TestController have exception" } |
更多技术资讯可关注:itheimaGZ获取
原文:https://www.cnblogs.com/zhuxiaopijingjing/p/12293867.html