한줄요약
좌충우돌 @Vaild 예외처리 (feat. MethodArgumentNotValidException)
잘못 입력하면 어떻게 되려나~ 하는 마음으로 테스트를 해봤고?
-> 끝없는trace
를 만날 수 있었다.
{
"timestamp": "2023-01-07T13:13:10.899+00:00",
"status": 400,
"error": "Bad Request",
"trace": "org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] "
// trace는 필요한 부분만 잘랐습니다. 나머지는 프로젝트 경로임.
"message": "Validation failed for object='registerRequestDto'. Error count: 1",
"errors": [
{
"codes": [
"Pattern.registerRequestDto.username",
"Pattern.username",
"Pattern.java.lang.String",
"Pattern"
],
"arguments": [
{
"codes": [
"registerRequestDto.username",
"username"
],
"arguments": null,
"defaultMessage": "username",
"code": "username"
},
[],
{
"arguments": null,
"defaultMessage": "^[a-z0-9]*$",
"codes": [
"^[a-z0-9]*$"
]
}
],
"defaultMessage": "\"^[a-z0-9]*$\"와 일치해야 합니다",
"objectName": "registerRequestDto",
"field": "username",
"rejectedValue": "sh123ㅁ",
"bindingFailure": false,
"code": "Pattern"
}
],
"path": "/api/members/register"
}
"trace": "org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] "
사실trace
는 우리에게 힌트를 주는 좋은 친구... 일지도?
@ExceptionHandler({MethodArgumentNotValidException.class})
protected ResponseEntity handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
return new ResponseEntity<>(e.getBindingResult().getFieldErrors().get(0).getDefaultMessage() ,HttpStatus.BAD_REQUEST);
}
아...
Pattern
defaultMessage가 썩 마음에 들지 않는다...!
-> @Pattern에서 message를 설정해주었다.
행복 그잡채...!
: )