2022.01.05 TIL

듀듀·2023년 1월 5일
0

[ 회원가입 Validation 유효성 검사하기 ]

UserDto

  • @Patternmessage를 통해 검증 메세지 전달

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 자료구조를 통해 KeyMessage 응답.
  • 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;
    }
profile
나는 내 의지대로 된다.

0개의 댓글