22/05/16 코로나줄서기

김석진·2022년 5월 16일
0

코로나줄서기

목록 보기
4/4

API설계

API서비스의 에러처리를 하는 방법에 대해서 공부하고 Spring부트의 기본 에러처리방법-> @ControllerAdvice까지 공부할에정이다.

스프링 부트 기본 에러 응답


왼쪽은 View이고 오른쪽은 Response Body쪽이며 스프링 부트의 기본 에러응답 이다.
이러한 기본응답에서 더많은 기본에러응답에 대한 정보들을 볼수 있는데 application.properties에 코드들을 추가함으로써 확인 할 수 있다.



그러나 시스템 정보가 유출될 수 있기때문에 조심해야한다.

스프링 부트 기본 에러 응답 응용

BasicErrorController

위에서 본것들이 스프링 부트의 기본 응답이며 이것이 마음에 든다면 BasicErrorController를 상속받아서 특정 메소드만 오버라이드 하거나 특정 핸들러 메소드를 추가하는 식으로 응용할수 있다.

  • BasicErrorController의 핸들러 메소드
    - BasicErrorController.errorHtml() -> 뷰응답
    - BasicErrorController.error() -> json body응답

커스텀 에러 페이지

기본

간단히 static html이나 template파일을 추가해서 커스텀 페이지를 등록하는 방법

  • 단일 기본 페이지
    - /resources/static/error.html
    - /resources/public/error.html
    - /resources/template/error.[템플릿확장자]
  • http status별 기본 페이지
    - /resources/[static|public|template]/error/{http status 번호}.[html|템플릿확장자]
    - /resources/[static|public|template]/error/4.xx[html|템플릿확장자]
    - /resources/[static|public|template]/error/5.xx[html|템플릿확장자]

@ExceptionHandler

비지니스 로직이 던진 예외에 반응하는 핸들러 메소드

  • 위치는 특정 컨트롤러 클래스 내부 or @ControllerAdvice 컴포넌트 내부
  • 특정 예외에 반응
  • 예외 처리범위
    - 컨트롤러 안에 작성했을 경우: 해당 컨트롤러만
    - @ControllerAdvice에 작성했을경우: 프로젝트 전체

예시

@ControllerAdvice

@ExceptionHanlder를 모아서 글로벌하게 적용할 때 쓰는 애노테이션이다.

종류

  • @ControlleAdvice(view예외처리할때)
  • @RestControllerAdvice=@ControllerAdvice+@ResponseBody
    (api 예외처리 할때)

속성

  • value==basePackages
  • basePacakages: 적용범위를 문자열로 이용해 특정 패키지로 지정
  • basePackagesClasses: 적용범위를 대표 클래스 한 개를 이용해 특정 패키지로 지정(대표클래스가 담긴 패키지를 특정 패키지로 지정한다)
    - basePackages를 type-safe하게 사용하기 위해 제공하는 옵션
  • assignableTypes: 적용 범위를 특정 클래스에 할당할 수 있는 컨트롤러로 지정
  • annotations: 적용 범위를 특정 애노테이션을 사용한 컨트롤러로 지정

ResponseEntityExceptionHandler

Spring MVC에서 내부적으로 발생하는 예외들을 처리하는 클래스

  • API 예외처리를 담당하는 @ControllerAdvice클래스에서 상속받아 사용
  • 커스터마이징을 원하는 특정 메소드를 오버라이드 해서 사용할 수 있다.
profile
주니어 개발자 되고싶어요

0개의 댓글