<머리&"/> <머리&">

 >  기사  >  Java  >  스프링 부트 1.5.4 예외 제어

스프링 부트 1.5.4 예외 제어

巴扎黑
巴扎黑원래의
2017-06-26 11:35:111468검색

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입니다. 이는 요청의 수신 유형에 따라 결정됩니다.

Accept:text/html -> 오류 페이지로 돌아가기
Accept:application/json, text/javascript -> 오류 json을 반환
특정 구현을 보려면 BasicErrorController 클래스를 확인하세요

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.