@Valid 예외에 걸리면, ajax에서 POST 요청에 대한 응답코드는 400
디버그 내용
2023-08-09 13:33:58.732 WARN 4104 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public org.springframework.http.ResponseEntity<com.modim.spring.global.response.dto.Response> co m.modim.spring.domain.member.controller.MemberController.join(com.modim.spring.domain.member.dto.MemberDto$RequestDto): [Field error in object 'requestDto' on field 'loginPassword': rejected value [1234]; codes [Length.requestDto.loginPassword,Length.loginPassword,Length.java.lang.String,Length]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [requestDto.loginPassword,loginPassword]; arguments []; default message [loginPassword],16,6]; default message [비밀번호는 6자 이상, 16자 이하로 입력해주십시오.]] ]
java
@ControllerAdvice
@RestController
public class ValidException {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Response> processValidationError(MethodArgumentNotValidException exception) {
BindingResult bindingResult = exception.getBindingResult();
ArrayList<String> arrayList = new ArrayList<String>();
for (FieldError fieldError : bindingResult.getFieldErrors()) {
arrayList.add(fieldError.getDefaultMessage());
}
return ResponseEntity.ok(Response.error(arrayList));
}
}
* Response : response DTO객체
* valid 에 걸리는 칼럼이 2개이상 일수 있으니, for문으로 ArrayList에 @Valid에 대한 Message를 담아서 반환하도록 함.
위 파일을 생성해두면, @Valid 예외 발생 시에 이쪽 코드를 탄다..
post mapping된 메소드에 @Valid는 파라미터에 있는 어노테이션이라 당연하게도 중단점이 걸리지않는다.
그래서 예외 발생시 만들어놓은 위 함수에 걸린다.
Exception handler 는 어렵다고 생각했는데 디버그 내용도 참고해보니 퍼즐 맞추듯이 이해가 된다
'개발아닌개발 > springboot' 카테고리의 다른 글
[ajax] OK 이외 오류일때, response값 확인하기 (0) | 2023.08.17 |
---|---|
[Thymeleaf] onclick 함수 호출할때, 값 넘기기 (0) | 2023.08.16 |
[HTML/js + java] POST method 컨트롤러 (회원가입,로그인 등) (0) | 2023.08.07 |
[thymeleaf] 문자열 비교 조건문 (th:if, th:text) (0) | 2023.07.31 |
[오류] html에서 thymeleaf sec:authorize 동작 안됨 (0) | 2023.06.22 |
댓글