728x90
유효성 검사
유효성 검사를 해야하는 이유는 클라이언트가 입력한 값이 서버에서 적절하게 이해하고 처리해줄 수 있는지 사전 검사해주는 역할이라 보면 된다. 스프링 부트에서는 아래의 라이브러리를 추가해주면 어노테이션만으로 아주 쉽게 유효성 검사를 할 수 있다. 커스텀이 필요하면 그때는 만들어주면 될거 같다.
implementation 'org.springframework.boot:spring-boot-starter-validation'
유효값 검증을 위해 validation을 사용하는데, 다음과 같은 어노테이션들을 제공한다.
어노테이션 | 설명 |
@NotEmpty | NULL 체크, 문자열의 경우 길이 0인지 검사 |
@NotBlank | NULL 체크 및 문자열의 경우 길이 0 및 빈 문자열(" ") 검사 |
@Length(min=, max=) | 최소, 최대 길이 검사 |
이메일 형식인지 검사 | |
@Max(숫자) | 지정한 값보다 작은지 검사 |
@Min(숫자) | 지정한 값보다 큰지 검사 |
@Null | 값이 NULL인지 검사 |
@NotNull | 값이 NULL이 아닌지 검사 |
적용
MemberDto에 활용해보는 예제이다.
@Getter
@Setter
public class MemberFormDto {
@NotBlank(message = "이름은 필수 입력 값입니다.")
private String name;
@NotEmpty(message = "이메일은 필수 입력 값입니다.")
@Email(message = "이메일 형식으로 입력해주세요.")
private String email;
@NotEmpty(message = "비밀번호는 필수 입력 값입니다.")
@Length(min = 8, max = 16, message = "비밀번호는 8자 이상, 16자 이하로 입력해주세요")
private String password;
@NotEmpty(message = "주소는 필수 입력 값입니다.")
private String address;
}
Controller 적용
컨트롤러 파라미터로 DTO 매개변수 앞에는 @Valid를 달아주고, BindingResult를 넣어주면 에러가 발생시 bindingResult에 에러 내용을 담아준다. 내 기억으로는 BindingResult는 반드시 유효성 검사하는 인스턴스 바로 다음에 위치해야한다. bindingResult는 다음에 정리해서 올리도록 하겠다.
@PostMapping(value = "/new")
public String memberForm(@Valid MemberFormDto memberFormDto,
BindingResult bindingResult, Model model) {
if (bindingResult.hasErrors()) {
return "member/memberForm";
}
try {
Member member = Member.createMember(memberFormDto, passwordEncoder);
memberService.saveMember(member);
} catch (IllegalStateException e) {
model.addAttribute("errorMessage", e.getMessage());
return "member/memberForm";
}
return "redirect:/";
}
확인
아무것도 입력하지 않고, 서버에 전송해보면 다음과 같이 에러 코드를 볼 수 있다.
728x90
'Spring' 카테고리의 다른 글
[Spring] 비동기 처리 (0) | 2022.05.30 |
---|---|
[Spring Boot] Devtools를 써보자 (0) | 2022.05.08 |
댓글