본문 바로가기
Framekwork/photogram

[스프링 부트 포토그램] 22강 인증 회원가입 - 유효성 검사하기

by 아이엠제니 2024. 9. 5.

IDE: IntetlliJ Ultimate
Spring Boot: 3.3.0
JDK: 17


 

 

 

validation 체크를 위해 `build.gradle`에 의존성 추가되어 있어야 함


dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-validation'
    .
    .
}

 

 

 

💾 AuthController.java

    @PostMapping("/auth/signup")
    public String signup(@Valid SignupReqDto signupReqDto, BindingResult bindingResult) { // key=value (x-www-form-urlencoded)

        if (bindingResult.hasErrors()) {
            Map<String, String> errorMap = new HashMap<>();

            for (FieldError error : bindingResult.getFieldErrors()) {
                errorMap.put(error.getField(), error.getDefaultMessage());
                log.info("error.getDefaultMessage() = " + error.getDefaultMessage());
            }
        }

        User join = authService.join(signupReqDto);
        log.info("join: {}", join.toString());

        return "auth/signin";
    }
  • `signup` 메서드의 파라미터에 `@Valid` 추가
  • 나중에 `BindingResult` 및 관련 코드 추가

 

 

👉 `username`이 20자가 넘는 경우 아래 에러 로그 출력

 

 

> BindingResult

Spring MVC에서 폼 데이터를 바인딩한 후, 그 결과를 담고 있는 객체임
  • 검증 결과 저장
    • `BindingResult` 객체는 유효성 검사를 수행하고 그 결과를 저장함
    • 검증 오류가 있으면, 이 객체에 오류 정보가 기록됨
  • 오류 처리
    • 폼 제출 후 `BindingResult`를 통해 오류를 확인하고, 사용자에게 적절한 오류 메시지를 표시할 수 있음
    • 검증 오류를 처리하고, 뷰에서 이를 어떻게 표시할지 결정하는 데 사용됨
  • 폼 데이터 처리
    • 바인딩된 데이터와 검증 결과를 함께 다루어, 요청 처리 로직에서 폼 데이터와 관련된 오류를 효과적으로 관리할 수 있음

 

 

 

 

💾 SignupReqDto.java

@Data // Getter, Setter
public class SignupReqDto {
    @Max(20)
    private String username;
    @NotBlank
    private String password;
    @NotBlank
    private String email;
    @NotBlank
    private String name;
    private String role;
    .
    .
}
  • `username` 필드에 `@Max(20)` 추가
  • `password`, `email`, `name` 필드에 `@NotBlank` 추가

 

 

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Data
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 번호 증가 전략이 DB를 따라감
    private Long id;

    @Column(length = 20, unique = true)
    private String username;
    @NotNull
    private String password;

    @NotNull
    private String name;
    private String website;
    private String bio; // 자기 소개
    @NotNull
    private String email;
    .
    .
    .
}
  • `password`, `name`, `email`에 `@NotNull` 추가

 

 

 

이지업클래스 [메타코딩] 스프링부트 SNS프로젝트 - 포토그램 만들기 강의 실습

참고
OpenAi. (2024) ChatGPT (version 3.5)[Large Language model]. https://chat.openai.com

 

 

 

 

 

300x250