자바 스크립트를 통해서 유효성 검토 또한 중요하지만 클라이언트 상에서 자바스크립트 변조가 가능하기 때문에 중요한 데이터에 대해서는 검증이 필요하다
서버에서 일일히 코드로 검증하는 방법이 있지만 spring에서 제공하는 @Valid를 통한 검증을 소스에 적용해보았다.
의존성 추가
gradle에 다음과 같이 의존성을 추가한다
implementation 'org.springframework.boot:spring-boot-starter-web'
- Hibernate validator에 대한 설명은 다음 블로그에서 잘 설명하고 있다.링크
JavaBean Validation과 Hibernate Validator 그리고 Spring Boot | Popit
이 글은 JavaBean Validation(이하 Bean Validation)의 기본 개념과 Hibernate Validator와의 관계 그리고 Spring Boot에서 간단한 사용법을 소개한다. Bean Validation Bean Validation은 JavaBean 유효성 검증을 위한 메타데
www.popit.kr
DTO에 애노테이션 추가
@Setter
@Getter
@NoArgsConstructor
@ToString
@EqualsAndHashCode
public class MemberDTO {
private Long id;
@NotEmpty(message = "email은 입력되어야합니다.")
private String email;
private CommonFile profile;
@NotEmpty(message ="비밀번호는 입력되어야합니다.")
private String password;
@NotEmpty(message ="닉네임은 입력되어야합니다.")
@Length(max = 30, message = "닉네임은 30자 이내여야합니다.")
private String nickName;
private String mobile;
private String msgYn;
private String msgId;
- 유효성 검토가 필요한 변수에 검증 애노테이션을 추가 해준다.
Controller @Valid 추가
- Controller 커맨드 객체 앞에 @Valid를 붙여준다
- 또한 BindingResult를 통해 결과가 에러인 경우 다시 form으로 리턴한다
@PostMapping("/member/signUp")
public String saveMember(@RequestParam(name ="file") MultipartFile file, @Valid MemberDTO memberDTO, BindingResult bindingResult) throws Exception{
if(bindingResult.hasErrors()){
return "/member/signUp";
}
Long id = memberService.saveMember(memberDTO);
log.info("{}",id);
return "/member/signUp";
}
에러 표기
<form id='formData' th:action="@{/member/signUp}" th:object="${memberDTO}" method="post" enctype="multipart/form-data">
... 중략
<div id="emailDiv" class="emailDiv">
<h4>개인 정보 입력</h4>
<label class="icon" for="email"><i class="icon-envelope"></i></label>
<input type="email" id='email' name="email" placeholder="example@email.com"/>
</div>
<td class="err" th:if="${#fields.hasErrors('email')}" th:errors="*{email}">email Error</td>
- 타임리프에서 만약 필드에 에러가 확인되면 에러메세지를 표기한다
참고사이트
참고 사이트 : https://spring.io/guides/gs/validating-form-input/
spring 공식 페이지에서 예시를 디테일하게 작성해놓았기 때문에 참고하면 편하다
'BackEnd > Spring' 카테고리의 다른 글
프록시 패턴과 @Transaction 동작원리 (0) | 2024.11.07 |
---|---|
스프링/자바 동작 순서 (0) | 2024.10.07 |
[Spring] 스프링 MVC Dispatcher Servlet (1) | 2023.04.05 |
스프링 빈의 멤버변수는 ThreadSafety하지 않다. (0) | 2022.12.19 |