Skip to content

Commit 31047f5

Browse files
committed
feat: IllegalArgumentException, ConstraintViolationException 핸들러 추가
- 잘못된 날짜 형식 등 IllegalArgumentException 400 처리 - @Min/@max 검증 실패 시 ConstraintViolationException 400 처리
1 parent c9c03b2 commit 31047f5

1 file changed

Lines changed: 21 additions & 0 deletions

File tree

apps/commerce-api/src/main/java/com/loopers/interfaces/api/ApiControllerAdvice.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.springframework.web.server.ServerWebInputException;
1919
import org.springframework.web.servlet.resource.NoResourceFoundException;
2020

21+
import jakarta.validation.ConstraintViolationException;
2122
import java.util.Arrays;
2223
import java.util.regex.Matcher;
2324
import java.util.regex.Pattern;
@@ -119,6 +120,26 @@ public ResponseEntity<ApiResponse<?>> handleBadRequest(ServerWebInputException e
119120
}
120121
}
121122

123+
@ExceptionHandler
124+
public ResponseEntity<ApiResponse<?>> handleBadRequest(IllegalArgumentException e) {
125+
log.warn("IllegalArgumentException : {}", e.getMessage());
126+
return failureResponse(ErrorType.BAD_REQUEST, e.getMessage());
127+
}
128+
129+
@ExceptionHandler
130+
public ResponseEntity<ApiResponse<?>> handleBadRequest(ConstraintViolationException e) {
131+
String message = e.getConstraintViolations().stream()
132+
.map(v -> {
133+
String path = v.getPropertyPath().toString();
134+
// "getRankings.page" -> "page"
135+
String field = path.contains(".") ? path.substring(path.lastIndexOf('.') + 1) : path;
136+
return String.format("'%s': %s", field, v.getMessage());
137+
})
138+
.collect(Collectors.joining(", "));
139+
log.warn("ConstraintViolationException : {}", message);
140+
return failureResponse(ErrorType.BAD_REQUEST, message);
141+
}
142+
122143
@ExceptionHandler
123144
public ResponseEntity<ApiResponse<?>> handleNotFound(NoResourceFoundException e) {
124145
return failureResponse(ErrorType.NOT_FOUND, null);

0 commit comments

Comments
 (0)