SpringBoot

[SpringBoot] RestAPI요청 예외처리(2)

wookjae 2021. 8. 26. 23:59

...Rest요청에 관한 에러처리 연습두번째 시간.

 

 

1. BizException 생성 (비즈니스 예외) 

비즈니스 예외처리 클래스 선언 (java.lang.RuntimeException 상속)

 

 

 

2. ApiExceptionController수정 (Rest Controller - throw Exception)

REST요청을 처리하는 URI - "/api/boards/{id}" 추가. PathVariable ("biz")일시,

BizException 강제발생..(서블릿컨테이너 WAS로 예외가 전달된다..)

 

 

 

3. ExceptionResolver 생성 (Custom)

org.springframework.web.servlet.HandlerExceptionResolver 인터페이스 구현하여 커스텀한다. 

--> resolveException 메서드 오버라이드 

 

* try ~catch --> BizException Reslove(해결) 

  - Convert to Error (Runtime 서버에러를 400에러로 변환)

   ("Exception == ServerError"(500) --> ClientBadRequest(400))

 

  - REST-HTTP REQUEST HEADER Attribute "accept" 설정에 따라  Json, HttpView 분기처리..

    accept: application/json 

    accept: text/html (미지정시 기본설정)

 

* ObjectMapper.writeValueAsString("JSON") --> JSON을 String으로 Convert.

 

 

4. 생성된 ExceptionResolver등록. 

 * HandlerExceptionResolver에 .add("커스텀 Exception Resolver"); - 리졸버를 추가한다. 

 

 

 

5. POST MAN(RestAPI Test..)  

 

***************

 요청1 

***************

Request (요청-REST)

요청유형 - HTTP GET 

요청URL - http://localhost:8080/api/boards/biz   

 

REQUEST Headers 

Accept  application/json "API응답결과 JSON으로 받는다"

 

Response (응답결과)

JSON Format

{
    "Exception" : "Package + Class(BizException)"
  , "Message" : "BizException: 사용자에러(잘못된 게시글 선택)"  
}

 

***************

 요청2 

***************

Request (요청-REST)

요청유형 - HTTP GET 

요청URL -  http://localhost:8080/api/boards/biz   

 

REQUEST Headers 

Accept  text/html "API응답결과 Html View"

--> Accept 속성 미 지정시 "text/html"로 설정된다. 

 

Resonse (응답결과)

--> 에러페이지 View리턴..  "Path(경로) : resources/templates/error/500.html"