공부기록

SPRING VALIDATOR 본문

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페이지로 리다이렉트해줍니다.

화면

반응형