작성
·
179
·
수정됨
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
Bean Validation과 @ExceptionHandler을 같이 사용하여 REST API를 작성하길 희망해서 아래와 같이 코드를 작성했습니다.
#회원가입 DTO
@Setter
@Getter
public class JoinDTO {
@NotBlank(message = "아이디는 필수값입니다.")
private String username;
@NotBlank(message = "패스워드는 필수값입니다.")
private String password;
}
#회원가입 컨트롤러
@PostMapping("/join")
public String joinProcess(@RequestBody @Validated JoinDTO joinDTO) {
회원가입하는 로직이 들어있습니다.
}
#ExControllerAdvice에 MethodArgumentNotValidException예외 처리 추가
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler
public ErrorResult userExHandle2(MethodArgumentNotValidException e) {
return new ErrorResult("join-ex", e.getMessage());
}
이상황에서 postman을 통해 password를 빼고 보내면 아래와 같이 응답값이 나오는데요.
{
"code": "join-ex",
"message": "Validation failed for argument [0] in public java.lang.String aaa.bbb.controller.JoinController.joinProcess(aaa.bbb.dto.JoinDTO): [Field error in object 'joinDTO' on field 'password': rejected value [null]; codes [NotBlank.joinDTO.password,NotBlank.password,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [joinDTO.password,password]; arguments []; default message [password]]; default message [패스워드를 입력해주세요]] "
}
제가 원한건 아래 형태입니다
{
"code": "join-ex",
"message": "패스워드를 입력해주세요"
}
깔끔하게 Bean Validation에서 보낸 message를 받는 방법이 없을까요?(e.getXxx메서드들 다 찍어보았는데 원하는 결과가 안나오네요 ㅠ)
답변 1
1
항상 감사드립니다!