Spring
SPRING VALIDATOR
gracelove91
2019. 11. 13. 11:53
반응형
pom.xml
pom.xml 에 다음과 같은 의존성을 추가합니다.
<!--validator -->
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.0.Final</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.0</version>
</dependency>
ServletConfig.java
ServletConfig.java 에 다음과 같이 추가합니다
@Bean
public Validator validator() {
return new LocalValidatorFactoryBean();
}
@Override
public Validator getValidator() {
return validator();
}
다음으로는 유효성을 검사할 객체의 클래스에 제약조건을 명시해줍니다.
간단하게 이벤트의 이름, 이벤트의 정원, 이메일을 iv로 갖는 Event 클래스를 만듭니다.
Event.java
@Getter @Setter
public class Event {
@Min(value = 3, message = "최소 3글자 이상이어야합니다.")
private String title;
@Min(value = 2, message = "최소 2명 이상이어야합니다.")
private Integer limit;
@Email(message = "이메일의 형식이어야합니다.")
private String email;
}
form.jsp
다음으로 jsp를 작성합니다. 바인딩에러를 쉽게 보여주기 위해 스프링폼을 이용합니다 (<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>)
<section class="container">
<div class="row">
<form:form modelAttribute="member" method="post" action="/loginProcess">
아이디 : <form:input path="username"/>
<form:errors path="username"/>
비밀번호 : <form:input path="password"/>
<form:errors path="password"/>
이메일 : <form:input path="email"/>
<form:errors path="email"/>
<button type="submit">로그인</button>
</form:form>
</div>
</section>
바인딩에러가 있으면 message는 <form:errors ... /> 와 매핑되서 보여집니다.
EventController.java
@Controller
@Slf4j
public class EventController {
@GetMapping("/event/form")
public String eventForm(@ModelAttribute Event event) {
return "/event/form";
}
@PostMapping("/event/form")
public String eventProcess(@Validated @ModelAttribute Event event, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
return "/event/form";
}
return "redirect:/index";
}
}
post로 요청을 받으면 @Validated 로 Event 객체를 검사합니다. 검사한 뒤 바인딩에러가 있으면 bingdingResult에 에러를 담아줍니다. 만약 에러가 있으면 다시 form.jsp를 보여주고, 에러가 없으면 index페이지로 리다이렉트해줍니다.
화면
반응형