[ 회원가입 Validation 유효성 검사하기 ]
UserDto
@Pattern
의 message
를 통해 검증 메세지 전달
Controller
Request
객체 앞에 @Valid
사용, Errors
를 통해 유효성 검사 적합 여부를 확인.
errors.hasErrors()
메서드를 통해 유효성 검사에 실패한 필드가 있는지 확인.
- 유효성 검사에 실패한 필드가 있다면,
Service
계층으로 Errors
객체를 전달해 비즈니스 로직을 구현하고 모델에 담는다.
@GetMapping("/auth/join")
public String join() {
return "/user/user-join";
}
@PostMapping("/auth/joinProc")
public String joinProc(@Valid UserRequestDto userDto, Errors errors, Model model) {
if (errors.hasErrors()) {
model.addAttribute("userDto", userDto);
Map<String, String> validatorResult = userService.validateHandling(errors);
for (String key : validatorResult.keySet()) {
model.addAttribute(key, validatorResult.get(key));
}
return "/user/user-join";
}
userService.userJoin(userDto);
return "redirect:/auth/login";
}
Service
- 유효성 검사에 실패한 필드들은
Map
자료구조를 통해 Key
와 Message
응답.
- Key :
valid_{dto 필드명}
- Message :
DTO
에서 작성한 Message
@Transactional(readOnly = true)
public Map<String, String> validateHandling(Errors errors) {
Map<String, String> validatorResult = new HashMap<>();
for (FieldError error : errors.getFieldErrors()) {
String validKeyName = String.format("valid_%s", error.getField());
validatorResult.put(validKeyName, error.getDefaultMessage());
}
return validatorResult;
}