728x90
반응형
이전 글에 이어서 진행하겠습니다.
예외 처리 시 throw를 이용하여 전달해 줄 객체를 만들어 주겠습니다.
먼저 AbstractBaseException 추상 클래스를 만들어 줍시다.
//예외처리를 하기 위해 RuntimeException 을 상속받아 줍니다.
public abstract class AbstractBaseException extends RuntimeException {
private static final long serialVersionUID = 8342235231880246631L;
//만들어둔 예외 코드사용을 위해 선언
protected BaseResponseCode responseCode;
//message 에 사용할 매개변수를 담을 배열 선언
protected Object[] args;
public AbstractBaseException() {
}
public AbstractBaseException(BaseResponseCode responseCode) {
this.responseCode = responseCode;
}
public BaseResponseCode getResponseCode() {
return responseCode;
}
public Object[] getArgs() {
return args;
}
}
그다음 AbstractBaseException를 상속받는 BaseException 클래스를 생성하여 줍시다.
public class BaseException extends AbstractBaseException {
private static final long serialVersionUID = 8342235231880246631L;
public BaseException() {
}
public BaseException(BaseResponseCode responseCode, String[] args) {
this.responseCode = responseCode;
this.args = args;
}
}
이제 Controller에서 예외 상황을 만들어 줍니다. ( 해당 부분은 자신의 Controller 상황에 맞게 사용해 주세요 ^^ )
BaseException 사용하여 예외를 던져 줍니다.
// 제목 필수 체크
if(StringUtils.isEmpty(parameter.getTitle())){
throw new BaseException(BaseResponseCode.VALIDATE_REQUIRED, new String[] {"title","제목"});
}
// 내용 필수 체크
if(StringUtils.isEmpty(parameter.getContents())){
throw new BaseException(BaseResponseCode.VALIDATE_REQUIRED, new String[] {"contents","내용"});
}
이제 마지막으로 컨트롤러에서 발생한 예외를 받아줄 BaseControllerAdvice 클래스를 만들어 줍시다.
/**
* @Controller 즉, 전역에서 발생할 수 있는 예외를 잡아 처리해주는 annotation 이다.
*
*/
@ControllerAdvice
public class BaseControllerAdvice {
//webConfiguration 에서 만들어 둔 messageSource 빈 사용
@Autowired
private MessageSource messageSource;
@ExceptionHandler(value = {BaseException.class}) //예외처리 내용을 담아준 클래스를 지정
@ResponseStatus(HttpStatus.OK) // 어떠한 통신 상태값에서 받을지 설정
@ResponseBody
private BaseResponse<?> handleBaseException(BaseException e, WebRequest request){
//BaseResponse 미리 만들어 놓은 응답 클래스를 사용하여 메시지를 전달 하여 준다.
//e.getResponseCode().name() = 메시지 프로퍼티 파일에 있는 code 를 찾는 매개변수
//e.getArgs() = 메세지에 넣어줄 매개변수
return new BaseResponse<String>(e.getResponseCode(), messageSource.getMessage(e.getResponseCode().name(),e.getArgs(),null));
}
위처럼 작성하여 주시면 Controller에서 던져준 예외상황이 해당 클래스로 넘어오게 되고 설정한 값에 맞게
코드와 메시지를 반환여 줍니다.
Swagger를 통하여 확인해 보면
{
"code": "VALIDATE_REQUIRED",
"message": "title(제목) 필드는 필수로 입력하셔야 합니다."
}
위처럼 미리 만들어 놓은 코드와 message를 반환하여 주는 것을 확인할 수 있습니다.
감사합니다 ^^
참고 영상 : https://www.inflearn.com/course/backend-%EC%86%A1%EC%9E%90%EB%B0%94#
728x90
반응형
'Spring & Spring Boot' 카테고리의 다른 글
[ Spring-Boot ] @Controller 에서 파라미터 받기 (0) | 2021.05.22 |
---|---|
[ Spring-Boot ] Mybatis DB 커넥션 설정하기 (0) | 2021.05.19 |
[ Spring-Boot ] Swagger 사용하기 (0) | 2021.05.19 |
[ Spring-Boot ] Scheduler 사용하기 (0) | 2021.05.19 |
[ JWT(Json Wen Token) ] 이란 무엇인가? (0) | 2021.04.17 |