在 java web開發過程中,難免會有一些系統異?;蛉藶楫a生一些異常。在 RESTful springboot 項目中如何優雅的處理?
分析:在RESTful 風格的springboot 項目中,返回的都是 body 對象,所以定義一個結果基類,其中包含 status,message,data(請求方法的返回結果),是比較合適的。
如果定義多個異常類進行處理,會比較麻煩。比如StudentNotExistsException、StudentExistsException。。。等,并且不能指定錯誤碼,不方便前端根據錯誤碼進行處理。
說明:一般的spring mvc模型處理流程如下
一般controller層 -> Service層 -> Dao層。
1.controller層,接受請求,進行分頁,DTO對象封裝操作。
2.service層,執行邏輯,控制并發,事務。
3.Dao層,與數據庫交互。
使用一個學生表的處理進行說明:
1、定義常見的錯誤枚舉 StudentExceptionEnum
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public enum StudentExceptionEnum { STUDENT_NOT_EXIST( 1004 , "學生不存在,請確認后再查" ), STUDENT_EXIST( 1005 , "學生已存在" ); private Integer status; private String comment; StudentExceptionEnum(Integer status, String comment) { this .status = status; this .comment = comment; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this .status = status; } public String getComment() { return comment; } public void setComment(String comment) { this .comment = comment; } } |
2 定義一個基本的處理結果類 RequestResult
1
2
3
4
5
6
7
8
9
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
|
@Data public class RequestResult { private String message; private Integer status; private Object data; public RequestResult(String message, Integer status, Object data) { this .message = message; this .status = status; this .data = data; } public RequestResult(String message, Integer status) { this .message = message; this .status = status; } public RequestResult(String message, StudentExceptionEnum requestExceptionEnum) { this .message = message; this .status = requestExceptionEnum.getStatus(); } public RequestResult() { status = 200 ; message = "ok" ; } public static RequestResult OK(Object data) { RequestResult result = new RequestResult(); result.setData(data); return result; } public static RequestResult EXCEPTION(String message, Integer status) { return new RequestResult(message, status); } public static RequestResult EXCEPTION(String message, StudentExceptionEnum requestExceptionEnum) { return new RequestResult(message, requestExceptionEnum); } } |
3 實體類 Student
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@Data public class Student implements Serializable{ private String id; private String nickname; private String name; private int age; private String sex; private String address; @Override public String toString() { return ToStringBuilder.reflectionToString( this ); } } |
4 處理請求,添加學生,nickname 必填項。此處只顯示 Service 片段代碼
1
2
3
4
5
6
7
8
9
10
11
|
@Override public RequestResult addStudent(Student student) { if (studentDao.queryIdByNickname(student.getNickname()) == null ) { studentDao.addStudent(student); System.out.println( "添加成功" ); student = studentDao.queryByNickname(student.getNickname()); return RequestResult.OK(student); } else { return RequestResult.EXCEPTION( "用戶" + student.getNickname() + "已存在" , StudentExceptionEnum.STUDENT_EXIST); } } |
5 此時,已經完成了基本的處理情況。下面就進行基本的測試了
5.1 添加一個新同學信息
5.2 再次添加讓其出現異常測試
二、到此基本已大功告成,但是,對于基本的運行時異常沒有處理,直接返回給前端會很不友好。所以要定義一個全局的 RuntimeException 異常處理類。
此處需要使用的關鍵標注: @ExceptionHandler
用法有兩種 1)在處理請求的 Controller 中添加 @ExceptionHandler,此時該方法只會處理該 Controller 拋出的異常。
2)將其用在全局的異常處理類中,全局異常處理類需要使用 @RestControllerAdvice 或 @ControllerAdvice 標記
我們需要處理全局的 RuntimeException,所以我們使用第二種方法。當然,這樣處理是為了客戶友好型,我們還是要處理這種錯誤,怎么辦?就需要將錯誤的信息記錄下來,方便以后分析處理。此處使用 logger 進行記錄。代碼如下
1
2
3
4
5
6
7
8
9
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
|
@RestControllerAdvice public class BaseExceptionHandler { private static Logger logger = LoggerFactory.getLogger(BaseExceptionHandler. class ); @ExceptionHandler (value = RuntimeException. class ) public RequestResult exceptionHandler(HttpServletRequest request,Exception e) { logError(request,e); return RequestResult.EXCEPTION( "內部處理異常,工程師正在抓緊搶修,請稍后再來..." , 500 ); } public static void logError(HttpServletRequest request, Exception e) { logger.error( "請求地址:" + request.getRequestURL()); logger.error( "請求方法:" + request.getMethod()); logger.error( "請求IP:" + getRemoteIp(request)); logger.error( "錯誤詳情:" ); StackTraceElement[] error = e.getStackTrace(); for (StackTraceElement stackTraceElement : error) { logger.error(stackTraceElement.toString()); } } public static String getRemoteIp(HttpServletRequest request) { String ip = request.getHeader( "X-Forwarded-For" ); if (ip == null || ip.length() == 0 || "unknown" .equalsIgnoreCase(ip)) { if (ip == null || ip.length() == 0 || "unknown" .equalsIgnoreCase(ip)) { ip = request.getHeader( "Proxy-Client-IP" ); } if (ip == null || ip.length() == 0 || "unknown" .equalsIgnoreCase(ip)) { ip = request.getHeader( "WL-Proxy-Client-IP" ); } if (ip == null || ip.length() == 0 || "unknown" .equalsIgnoreCase(ip)) { ip = request.getHeader( "HTTP_CLIENT_IP" ); } if (ip == null || ip.length() == 0 || "unknown" .equalsIgnoreCase(ip)) { ip = request.getHeader( "HTTP_X_FORWARDED_FOR" ); } if (ip == null || ip.length() == 0 || "unknown" .equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } } else if (ip.length() > 15 ) { String[] ips = ip.split( "," ); for ( int index = 0 ; index < ips.length; index++) { String strIp = (String) ips[index]; if (!( "unknown" .equalsIgnoreCase(strIp))) { ip = strIp; break ; } } } return ip; } } |
進行測試看是否生效:
修改添加學生信息代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
public RequestResult addStudent(Student student) { int a = 1 / 0 ; if (studentDao.queryIdByNickname(student.getNickname()) == null ) { studentDao.addStudent(student); System.out.println( "添加成功" ); student = studentDao.queryByNickname(student.getNickname()); return RequestResult.OK(student); } else { return RequestResult.EXCEPTION( "用戶'" + student.getNickname() + "'已存在" , StudentExceptionEnum.STUDENT_EXIST); } } |
進行測試
后臺打印錯誤信息
1
2
3
4
5
6
7
8
9
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
58
59
60
61
62
63
64
|
2018 - 03 - 26 17 : 01 : 19.125 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : 請求地址:http: //localhost:8080/demo1/student 2018 - 03 - 26 17 : 01 : 19.125 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : 請求方法:POST 2018 - 03 - 26 17 : 01 : 19.125 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : 請求IP: 0 : 0 : 0 : 0 : 0 : 0 : 0 : 1 2018 - 03 - 26 17 : 01 : 19.125 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : 錯誤詳情: 2018 - 03 - 26 17 : 01 : 19.125 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : com.huitong.demo.service.StudentService.addStudent(StudentService.java: 71 ) 2018 - 03 - 26 17 : 01 : 19.125 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : com.huitong.demo.controller.StudentController.addStudent(StudentController.java: 38 ) 2018 - 03 - 26 17 : 01 : 19.125 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 2018 - 03 - 26 17 : 01 : 19.125 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 62 ) 2018 - 03 - 26 17 : 01 : 19.125 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 43 ) 2018 - 03 - 26 17 : 01 : 19.125 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : java.lang.reflect.Method.invoke(Method.java: 498 ) 2018 - 03 - 26 17 : 01 : 19.125 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java: 209 ) 2018 - 03 - 26 17 : 01 : 19.125 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java: 136 ) 2018 - 03 - 26 17 : 01 : 19.125 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java: 102 ) 2018 - 03 - 26 17 : 01 : 19.125 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java: 870 ) 2018 - 03 - 26 17 : 01 : 19.125 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java: 776 ) 2018 - 03 - 26 17 : 01 : 19.125 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java: 87 ) 2018 - 03 - 26 17 : 01 : 19.129 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java: 991 ) 2018 - 03 - 26 17 : 01 : 19.129 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java: 925 ) 2018 - 03 - 26 17 : 01 : 19.129 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java: 978 ) 2018 - 03 - 26 17 : 01 : 19.129 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java: 881 ) 2018 - 03 - 26 17 : 01 : 19.129 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : javax.servlet.http.HttpServlet.service(HttpServlet.java: 661 ) 2018 - 03 - 26 17 : 01 : 19.129 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java: 855 ) 2018 - 03 - 26 17 : 01 : 19.130 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : javax.servlet.http.HttpServlet.service(HttpServlet.java: 742 ) 2018 - 03 - 26 17 : 01 : 19.130 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 231 ) 2018 - 03 - 26 17 : 01 : 19.130 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 166 ) 2018 - 03 - 26 17 : 01 : 19.130 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java: 52 ) 2018 - 03 - 26 17 : 01 : 19.130 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 193 ) 2018 - 03 - 26 17 : 01 : 19.130 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 166 ) 2018 - 03 - 26 17 : 01 : 19.130 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java: 123 ) 2018 - 03 - 26 17 : 01 : 19.130 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 193 ) 2018 - 03 - 26 17 : 01 : 19.130 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 166 ) 2018 - 03 - 26 17 : 01 : 19.130 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java: 99 ) 2018 - 03 - 26 17 : 01 : 19.130 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java: 107 ) 2018 - 03 - 26 17 : 01 : 19.130 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 193 ) 2018 - 03 - 26 17 : 01 : 19.130 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 166 ) 2018 - 03 - 26 17 : 01 : 19.130 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java: 109 ) 2018 - 03 - 26 17 : 01 : 19.130 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java: 107 ) 2018 - 03 - 26 17 : 01 : 19.130 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 193 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 166 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java: 81 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java: 107 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 193 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 166 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java: 200 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java: 107 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 193 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 166 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 199 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java: 96 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java: 496 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: 140 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 81 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 87 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 342 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.coyote.http11.Http11Processor.service(Http11Processor.java: 803 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java: 66 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java: 790 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java: 1459 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java: 49 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java: 1142 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java: 617 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java: 61 ) 2018 - 03 - 26 17 : 01 : 19.131 ERROR 9136 --- [nio- 8080 -exec- 2 ] c.h.d.controller.BaseExceptionHandler : java.lang.Thread.run(Thread.java: 745 ) 2018 - 03 - 26 17 : 01 : 19.133 WARN 9136 --- [nio- 8080 -exec- 2 ] .m.m.a.ExceptionHandlerExceptionResolver : Resolved exception caused by Handler execution: java.lang.ArithmeticException: / by zero |
總結
以上所述是小編給大家介紹的springboot 錯誤處理小結,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:https://www.cnblogs.com/zhaopengcheng/archive/2018/03/26/8652116.html