Spring 이상 처리 자세 총화

6682 단어 Spring예외 처리
본 논문 의 사례 는 Spring 이상 처리 의 각종 자 세 를 총 결 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
1.머리말
통 일 된 이상 처리 가 응용 에 대한 중요성 은 말 하지 않 아 도 안다.오늘 은 Spring 이 어떻게 통일 적 인 Rest 이상 처 리 를 하 는 지 소개 하 겠 습 니 다.동시에 우 리 는 그들 사이 의 우열 을 간단하게 비교 할 것 이다.
2.@Controller 결합@ExceptionHandler
컨트롤 러 에 방법 을 설명 한 다음@ExceptionHandler주석 으로 표시 하면 됩 니 다.

 @Controller
 @RequestMapping("/test")
 public class TestController {
 
   @RequestMapping("/err")
   @ResponseBody
   public Object demo1(){
     int i = 1 / 0;
     return new Date();
   }
 
   @ExceptionHandler({RuntimeException.class})
   public ModelAndView fix(Exception ex){
     System.out.println(ex.getMessage());
     return new ModelAndView("error",new ModelMap("ex",ex.getMessage()));
   }
 }
장점:
  • 우선 순위 가 가장 높다.
  • @ExceptionHandler표 시 된 방법 반환 값 형식 은 여러 가 지 를 지원 합 니 다.보기 일 수도 있 고json일 수도 있 습 니 다.
  • 단점:
  • 하나Controller의 주석 에 있 는 이상 유형 은 같 을 수 없습니다.그렇지 않 으 면 운행 할 때 이상 을 던 집 니 다.@ExceptionHandler4567918)
  • 명시 적 인 성명 처리 가 필요 한 이상 유형.
  • 역할 영역 은 이Controller일 뿐 진정한 의미 에서 의 전체적인 이상 이 아니다.전역 에 작용 하려 면 모든 컨트롤 러 의 부모 클래스 에 넣 어야 합 니 다.
  • 3.@Controller Advice 결합@ExceptionHandler
    이것 은 2.의 개선 형 으로 정의@ControllerAdvice유형 을 통 해 방법 에 표시@ExceptionHandler하여 전체 이상 처리 의 목적 을 달성 했다.
    
     @ControllerAdvice
     public class TestController {
     
     
       @ExceptionHandler({RuntimeException.class})
       public ModelAndView fix(Exception ex){
         System.out.println(ex.getMessage());
         return new ModelAndView("error",new ModelMap("ex",ex.getMessage()));
       }
     }
    장점:
  • 전역 의 이상 처리.
  • 응답 을 완전히 제어 하 는 주체 와 상태 코드
  • 여러 개의 이상 을 같은 방법 에 투사 하여 함께 처리 하고 업 데 이 트 된 Restful ResponseEntity 응답
  • 을 충분히 이용 했다.
    단점:
  • 하나Controller의 주석 에 있 는 이상 유형 은 같 을 수 없습니다.그렇지 않 으 면 운행 할 때 이상 을 던 집 니 다.@ExceptionHandler4567918)
  • 명시 적 인 성명 처리 가 필요 한 이상 유형.
  • 일반적으로 도 이 방식 으로 이상 처 리 를 권장 한다.대부분의 경우 호 환 된다.
    4.HandlerExceptionResolver 인터페이스
    실현HandlerExceptionResolver인터페이스,여기 서 우 리 는 추상 적 인 실현AbstractHandlerExceptionResolver을 계승 한다.
    
     @Component
     public class RestResponseStatusExceptionResolver extends AbstractHandlerExceptionResolver {
     
       @Override
       protected ModelAndView doResolveException(
        HttpServletRequest request, 
        HttpServletResponse response, 
        Object handler, 
        Exception ex) {
         try {
           if (ex instanceof IllegalArgumentException) {
             return handleIllegalArgument((IllegalArgumentException) ex, response, handler);
           }
          //todo more exception
         } catch (Exception handlerException) {
            //todo 
         }
         return null;
       }
     
       private ModelAndView 
        handleIllegalArgument(IllegalArgumentException ex, HttpServletResponse response) 
        throws IOException {
         response.sendError(HttpServletResponse.SC_CONFLICT);
         String accept = request.getHeader(HttpHeaders.ACCEPT);
          //todo more response
         return new ModelAndView();
       }
     }
    장점:
  • 이것 은 전역 적 인 이상 프로세서 입 니 다.
  • 이런 방식 은 전역 이상 처리 반환JSP,velocity등 템 플 릿 보기 가 비교적 편리 하 다.
  • 다양한 형식의 응답 을 지원 합 니 다.덮어 쓰 는 방법 은ModelAndView이지 만 매개 변수 에HttpServletResponse가 있 기 때문에 저 희 는 이 를 이용 하여 맞 춤 형 응답 결 과 를 만 들 수 있 습 니 다.예 를 들 어 클 라 이언 트 가 입력application / json을 요구 하면 오류 가 발생 했 을 때 우 리 는application / json인 코딩 으로 응답 하 는 것 을 확보 해 야 합 니 다.
  • 단점:
  • 우 리 는 저급한HttpServletResponse과 상호작용 을 해 야 각종 형식의 응답 체 를 실현 할 수 있다.
  • 우선 순위 가 비교적 낮다
  • 5.Spring Boot 의 이상 처리
    니 가 쓰 는 프레임 이 스프링 부츠 라면우 리 는 또 그것 의 독특한 처리 방식 을 사용 할 수 있다.저급한 API 를 차단 하고 단점 도 뚜렷 해 구체 적 인 이상 을 포착 할 수 없다 는 장점 이 있다.
    5.1 오류 컨트롤 러 구현
    Spring Boot 는 기본적으로/error맵 을 제공 하여 모든 오 류 를 처리 합 니 다.Servlet 용기 에 전역 오류 페이지(Whitelabel Error Page)를 등록 하고 클 라 이언 트 를 되 돌려 줍 니 다.
    ErrorController 인 터 페 이 스 를 실현 하고 Bean 으로 등록 합 니 다.여 기 는 더 이상 예 를 들 지 않 는 다.참고 가능BasicErrorController.
    5.2 추가ErrorAttributes기본 이상 처 리 를 교체 하기 위해 ErroAttributes 형식의 Bean 을 추가 할 수도 있 습 니 다.
    
     @Component
     public class MyCustomErrorAttributes extends DefaultErrorAttributes {
     
       @Override
       public Map<String, Object> getErrorAttributes(
        WebRequest webRequest, boolean includeStackTrace) {
         Map<String, Object> errorAttributes = 
          super.getErrorAttributes(webRequest, includeStackTrace);
         errorAttributes.put("locale", webRequest.getLocale()
           .toString());
         errorAttributes.remove("error");
     
         //todo your business
     
         return errorAttributes;
       }
     }
    5.3 상속 기본 오류 컨트롤 러
    Spring Boot 자동 설정 은 ErrorController 인터페이스 이상 처 리 를 실현 하 는 기본 클래스 Basic ErrorController 도 제공 합 니 다.기본 값 은 text/html 형식 요청 을 처리 하 는 오류 입 니 다.이 기본 클래스 의 사용자 정의 처리 더 많은 요청 형식 을 계승 하여 공공 방법 을 추가 하고@RequestMapping 주 해 를 사용 하 는 produt 속성 지정 처리 형식 을 사용 할 수 있 습 니 다.
    
     @Component
     public class MyErrorController extends BasicErrorController {
     
       public MyErrorController(ErrorAttributes errorAttributes) {
         super(errorAttributes, new ErrorProperties());
       }
     
       @RequestMapping(produces = MediaType.APPLICATION_XML_VALUE)
       public ResponseEntity<Map<String, Object>> xmlError(HttpServletRequest request) {
         
       //todo your business
     
       }
     }
    6.Spring 5 의 Response Status Exception
    또한 최신 스프링 5 에 서 는ResponseStatusException이상 을 던 져 처리 할 수 있다.
    좋 은 점:
  • 사용 이 비교적 편리 하 다
  • 한 가지 유형,여러 가지 상태 코드:한 가지 이상 유형 은 여러 가지 서로 다른 응답 을 가 져 올 수 있다.@ExceptionHandler 에 비해 긴밀 한 결합 감소
  • 사용자 정의 이상 클래스 를 만 들 필요 가 없습니다
  • 프로 그래 밍 방식 으로 이상 을 만 들 수 있 기 때문에 이상 처 리 를 더욱 잘 제어 할 수 있다
  • 단점:
  • 통 일 된 이상 처리 방식 이 없 으 면 일부 응용 프로그램의 범 위 를 강제 집행 하 는 것 이 더욱 어렵다
  • 중복 코드 가 대량으로 있 을 수 있 습 니 다.
  • 7.총화
    우 리 는 자주 사용 되 고 자주 사용 되 지 않 는 Spring 처리 이상 방식 에 대해 정리 하고 우열 을 분석 했다.그 중에서 당신 에 게 적합 한 처리 방식 을 찾 을 수 있 을 것 이 라 고 믿 습 니 다.만약 당신 에 게 도움 이 된다 면 칭찬 을 눌 러 주세요.당신 의 격려,나의 원동력!
    자바 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
    본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

    좋은 웹페이지 즐겨찾기