이번에는 TjlogException을 예외 컨트롤러로 보내줘야해서
ExceptionController 클래스를 만들어주었다
코드를 보자면
public class ExceptionController {
@ExceptionHandler(TjlogException.class)
public ResponseEntity tjlogException(TjlogException e){
int statusCode = e.getStatusCode();
ErrorResponse body = ErrorResponse.builder().
code(String.valueOf(statusCode))
.message(e.getMessage())
.validation(e.getValidation())
.build();
//응답코드와 바디를 제이슨으로 응답해준다
ResponseEntity<ErrorResponse> responseEntity = ResponseEntity.status(statusCode)
.body(body);
return responseEntity;
}
}
이런 코드가있는데 코드 리뷰를해보자면
@RestControllerAdvice 애노테이션은 예외가 발생하면 이 애노테이션에 있는 컨트롤러로와서 예외처리를하고 json이나 xml같은 문법으로 리턴을 해준다
먼저 @ExceptionHandler 애노테이션은 예외가 발생한 클래스를 적어주는데 클래스가 예외가 터지면 이 애노테이션으로와서 예외 처리를한다
반환하는 값으로는 ResponseEntity를 썼는데 이 클래스를 사용하면
상태코드와 바디부분을 josn으로 응답으로 보낼 수 있다.
먼저 e.getStatusCode()로 상태코드를 선언해주고
ErrorResponse에있는 빌더패턴으로 TjlogException에서 온 예외들을 빌더클래스로 넣어준다
마지막으로
ResponseEntity responseEntity = ResponseEntity.status(statusCode)
.body(body);
ResponseEntity에 상태코드와 바디를 넣어주어서 반환하면 응답으로 400에러와 에러메세지를 json으로 출력한다.
