회원가입 시 유효성 검증을 위해 @Valid
어노테이션을 사용하여 객체 단에서 유효성 검증을 하도록 했다. 설정해둔 @NotNull
, @Size
, @Pattern
등 조건에 부합하지 못하면 MethodArgumentNotValidException
이 발생하고 이것을 커스텀해서 해당 메세지를 400에러와 함께 body에 넣어 클라이언트 쪽으로 보내도록 했다.
이때 에러 메세지가 무작위로 변경되어 나타났는데, 내가 원하는 것은
@NotNull
---> @Size
---> @Pattern
이런 식으로 메세지를 내려주길 원했다.
@Valid
가 아니라 @Validated
를 사용해야하고 @GroupSequence
를 통해 순서를 정해주면 된다.https://dncjf64.tistory.com/302 이 글을 보고 제 상황에 맞게 바꾸어 진행했습니다.
public class ValidationGroups {
public interface NotNullGroup {};
public interface PatternCheckGroup {};
public interface SizeCheckGroup {};
public interface EmailCheckGroup {};
}
@GroupSequence
를 사용하여 원하는 순서대로 정리해준다.import com.accountapi.validation.ValidationGroups.NotNullGroup;
import com.accountapi.validation.ValidationGroups.PatternCheckGroup;
import com.accountapi.validation.ValidationGroups.SizeCheckGroup;
import com.accountapi.validation.ValidationGroups.EmailCheckGroup;
import javax.validation.GroupSequence;
@GroupSequence({NotNullGroup.class, SizeCheckGroup.class,
PatternCheckGroup.class, EmailCheckGroup.class})
public interface ValidationSequence {
}
@Size(min = 4, max = 30, message = "아이디는 4글자에서 30글자 사이로 입력해주세요.", groups = ValidationGroups.SizeCheckGroup.class)
@NotBlank(message = "아이디를 입력해주세요.", groups = ValidationGroups.NotNullGroup.class)
@Pattern(regexp = "^([a-z가-힣0-9]){4,30}$", message = "대문자, 특수문자는 입력할 수 없습니다.", groups = ValidationGroups.PatternCheckGroup.class)
private String userId;
@Valid
사용했던 것을 @Validated
로 바꾸어준다. @PostMapping
public ResponseEntity createUser(@Validated(ValidationSequence.class) @RequestBody User signUpInfo) {
accountManager.createUser(signUpInfo);
return new ResponseEntity<>(HttpStatus.OK);
}
https://dncjf64.tistory.com/302
https://okky.kr/article/381626
https://stackoverflow.com/questions/11804879/error-messages-are-not-in-the-correct-order