spring boot에서는 통합 예외 처리를 구현했습니다.
1. 오류 코드 페이지 매핑
1.1 정적 페이지
를 사용하려면 resources/static/error 폴더에 구성해야 합니다. 코드네이밍
다음은 존재하지 않는 링크 접속시 이 페이지를 찾아보세요
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Not Found</title></head><body><h1>Sorry, Not Found</h1><p>status code is 404</p></body></html>
표시효과
1.2 동적 템플릿 페이지( page 저장 위치는 변경할 수 없으며, 이름은 4xx, 5xx 2개만 있습니다)
예(5xx.ftl)
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Error</title></head><body><h1>server error</h1><p><div style="color:red;font-size:large">error code: ${status}-${error}</div><div style="color:red;font-size:medium">error msg: ${exception!},${message!}</div><div><div id="trace" style="color:grey;font-size:small;display: none;border: 1px solid black;padding: 10px;">${trace!}</div></div></p></body></html>
고의적으로 예외를 발생시키는 요청에 접근(/test2 /throwex)
@Controller @RequestMapping("/test2")public class Test2 { @RequestMapping("")public String index(){return "test"; } @RequestMapping("/throwex") @ResponseBodypublic String throwex(){int a = 3;int b=0;return String.valueOf(a/b); } }
페이지 효과
Ajax를 사용하여 이 오류 요청에 액세스하면 json으로 표시되는 오류 메시지가 반환됩니다
데모 페이지(/test2 -> test.ftl)
<!DOCTYPE html><html><head><meta charset="UTF-8" /><title>test</title><script type="text/javascript" src="/js/jquery-2.0.3.min.js?1.1.11"></script></head><body><h1>test page</h1><div><button onclick="doAjax();">请求异常测试</button><div id="msg"></div><textarea id="errorMsg" style="color:red;width: 80%;height:300px"></textarea></div><script type="text/javascript">var doAjax = function () { $.ajax({ url:'/test2/throwex', async:true, type:'GET', data:{}, dataType:'json', success:function (data) { $('#msg').text(data); }, error: function(xhr, textStatus, errorThrown) {// alert(XMLHttpRequest.status);// alert(XMLHttpRequest.readyState);// alert(textStatus); $('#errorMsg').text(xhr.responseText); } }); };</script></body></html>
테스트 페이지를 방문하여 버튼을 클릭하고 다음과 같이 효과를 확인합니다.
여기에서는 웹 브라우저와 ajax를 사용하여 오류 인터페이스에 액세스하고 다른 결과를 얻습니다. 오류 Json입니다. 이는 요청의 수신 유형에 따라 결정됩니다.
2. 사용자 정의 오류 코드 페이지에 매핑
2.1 정적 페이지 매핑 구성(내장된 컨테이너를 사용자 정의할 때 오류 코드 매핑 관계 제어)
@Componentpublic class CustomizationBean implements EmbeddedServletContainerCustomizer{/** * 定制方法一:实现EmbeddedServletContainerCustomizer * @param container */@Overridepublic void customize(ConfigurableEmbeddedServletContainer container) {//container.setPort(9000); }/** * 定制方法二:注入EmbeddedServletContainerFactory * @return */@Beanpublic EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(); factory.setPort(9001); factory.setSessionTimeout(10, TimeUnit.MINUTES);//优先级高于配置在/static/error文件夹里面的404.html页面factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error/403.html"));return factory; } }
2.2 동적 페이지 매핑 구성
@Componentpublic class MyErrorViewResolver implements ErrorViewResolver { @Overridepublic ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) { return new ModelAndView("/error/error",model);} }
이 사용자 정의 ViewResolver는 위 구성은 기본 페이지 프로세서인 DefaultErrorViewResolver를 대체하여 통합 관리를 위해 오류 코드에 관계없이 모든 오류를 오류 페이지 error.ftl에 매핑합니다.
새로운 error.ftl 페이지 렌더링 오류 내용
5xx.ftl
과 유사한 구성
3. 일부 예외 구성
#BasicErrorController的请求路径(你可以遇到错误后跳转的路径,该路径是一个BasicErrorController的请求路径,映射到它errorHtml或者error方法,由请求接受类型决定,一个返回错误页面,一个返回错误json)
#server.error.path=/error
#always include stacktrace(是否包含异常的堆栈信息,默认NEVER,页面无法获取到${trace!}的值,可取值NEVER,ALWAYS,ON_TRACE_PARAM; on_trace_param意思是请求带上参数 ?trace=true)
<em>server.error.include-stacktrace=always<br><br><br></em>
4.springboot 예외 처리 프로세스
컨트롤러->오류 점프-> >errorHtml 메소드 호출->getErrorAttributes(오류 속성 가져오기 및 모델 반환)->페이지 프로세서에 전달 ErrorViewResolver
그래서 컨트롤러/customizeErrorAttributes/customize를 사용자 정의할 수 있습니다. 더 복잡한 예외 처리를 달성하기 위한 ErrorViewResolver 등
위 내용은 스프링 부트 1.5.4 예외 제어의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!