- MessageCode Enum 정의
public enum OrderCode implements MessageCode {
INVALID_AMOUNT("ORDER.INVALID_AMOUNT", HttpStatus.BAD_REQUEST);
}- CustomException 작성
public class InvalidAmountException extends AbstractException {
public InvalidAmountException(int amount) {
super(OrderCode.INVALID_AMOUNT, amount);
}
}- 서비스 코드에서 throw
if (amount <= 0) {
throw new InvalidAmountException(amount);
}- message.properties 작성
ORDER.INVALID_AMOUNT=잘못된 가격입니다.AbstractException서비스에서 발생시키는 모든 도메인/비즈니스 예외의 부모 클래스입니다.
public abstract class AbstractException extends RuntimeException {
private final MessageCode messageCode;
private final Object[] messageArguments;
}MessageCode
public interface MessageCode {
String getCode();
HttpStatus getStatus();
}예시:
public enum UserMessageCode implements MessageCode {
USER_NOT_FOUND("USER.NOT_FOUND", HttpStatus.NOT_FOUND);
}- 'GlobalExceptionHandler' 서비스 전역에서 발생한 예외를 처리하는 공통 Handler 입니다.
@RestControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(AbstractException.class)
public ResponseEntity<ApiResponse<Void>> globalException(AbstractException e) {}
@ExceptionHandler(Exception.class)
public ResponseEntity<ApiResponse<Void>> exception(Exception e) {}
}처리 방식:
| 예외 타입 | 처리 내용 |
|---|---|
AbstractException |
MessageCode 기반 응답 생성, HttpStatus지정, messageArguments 포함 가능 |
그 외 모든 Exception |
{서비스명}.UNKNWON 코드로 처리, 500 응답 반환 |
MessageResolver각 서비스는message.properties파일만 구성하면 메세지가 자동으로 매핑됩니다.
USER.NOT_FOUND=회원을 찾을 수 없습니다.공통 모듈에서 제공하는 ApiResponse.failure() 구조를 따릅니다.
{
"success": false,
"code": "ORDER.INVALID",
"message": "주문 금액이 올바르지 않습니다: 10000",
"args": [10000]
}