본문 바로가기

SPRING

스프링 유효성 검증 : @Valid 어노테이션

자바에서는 Validator 인터페이스를 통해 유효성 검증을 제공한다.

스프링에서는 @Valid 어노테이션으로 조금 더 편하게 검증할 수 있는 방법을 제공하는데 이에 대해 알아보자.

 

 

1. pom.xml에 유효성 검증 기능을 구현한 라이브러리 추가

아래의 예제는 hibernate를 사용

 

<!-- 자바의 유효성 검증 기능을 구현한 라이브러리 추가 -->
<dependency>
       <groupId>org.hibernate</groupId>
       <artifactId>hibernate-validator</artifactId>
       <version>5.1.3.Final</version>
</dependency>

<!-- hibernate-validator 대신 java에서 제공하는 api로도 사용 가능-->
<dependency>
       <groupId>javax.validation</groupId> 
       <artifactId>validation-api</artifactId> 
       <version>1.0.0.GA</version> 
</dependency> 

 

2. BoardVO 커맨드 객체에 원하는 어노테이션 추가

어노테이션은 String 타입에서만 적용 가능하다.

+ 유효성 체크가 필요한 변수들은 나중에 꼭 String으로 지정하자.

 

package com.spring.board.domain;

import java.sql.Timestamp;

import org.hibernate.validator.constraints.NotEmpty;

public class BoardVO {
	
	private long seq;
	
	@NotEmpty(message="제목을 입력하세요.")
	private String title;
	
	@NotEmpty(message="내용을 입력하세요.")
	private String content;
	
	@NotEmpty(message="작성자를 입력하세요.")
	private String writer;
	
	private long password;
	private Timestamp regDate;
	private long readCnt;
	private long boardType;
    
	// setter, getter 생략

}

 

 

 

3. Controller 메서드에 @Valid 어노테이션 / BindingResult 객체 추가

 

model.addAttribute("board", enw BoardVO())

<form:form commandName="">에서 커맨드 객체를 요구하기 때문에 GET 요청에서 하나 만들어줘서 넘겨줘야함

 

@Valid

유효성 검사를 위한 어노테이션

 

BindingResult

@Valid와 짝꿍인 객체. 에러를 담아주는 객체.

 

@ModelAttribute("커맨드 객체명")

GET 단계에서 model에 받아서 전달한 정보들을 전달받기 위해 필요한 어노테이션?

유효성 검증에서는 꼭 들어가야함! 그렇지 않으면 에러 발생!

 

	// INSERT
	@RequestMapping(value="/write")
	public String insertFreePost(Model model) {
		model.addAttribute("board", new BoardVO()); // <form:form> 태그 쓰려면 필요
		return "board/free/free_insert";
	}
	
	@RequestMapping(value="/write", method=RequestMethod.POST)
	public String insertFreePost(@ModelAttribute("board") @Valid BoardVO board, 
    				BindingResult bindingResult) { 
		
		if(bindingResult.hasErrors()) { // 유효성 검사에서 에러 났을 경우
			return "/board/free/free_insert";
		}
		
		boardService.insertPost(board);
		return "redirect:/free/list";
	}

 

4. jsp파일을 <form:form> 태그를 이용해 작성하기

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>자유게시판</title>
<link href="<c:url value="/resources/css/board.css"/>" rel='stylesheet'>
</head>
<body>
<div id="wrap" align="center">
	<h1>자유게시판 - 글쓰기</h1>
	<form:form action="/board/free/write" 
		method="post" commandName="board"> <!-- command는 get 요청에서 날려준 이름과 동일 -->
		<table>
			<tr>
				<th>게시판 선택</th>
				<td>
				<input type="radio" name="boardType" value="1" checked="checked">자유게시판 
				<input type="radio" name="boardType" value="2">회원게시판
				</td>
			</tr>
			<tr>
				<th>제목</th>
				<td>
				<form:input path="title"/>
				<form:errors path="title"/> <!-- 추가 -->
				</td>
			</tr>
			<tr>
				<th>작성자</th>
				<td>
				<form:input path="writer"/>
				<form:errors path="writer"/> <!-- 추가 -->
				</td>
			</tr>
			<tr>
				<th>내용</th>
				<td>
				<form:textarea path="content" cols="70" rows="15"/>
				<form:errors path="content"/> <!-- 추가 -->
				</td>
			</tr>
			<tr>
				<th>비밀번호</th>
				<td><form:password path="password"/>
				<form:errors path="password"/> <!-- 추가 -->
				</td>
			</tr>
		</table>
		<input type="submit" value="등록">
		<input type="reset" value="취소">
		<input type="button" value="목록으로" onclick="location.href='/board/free/list'">
	</form:form>
</div>
</body>
</html>

 

 

'SPRING' 카테고리의 다른 글

스프링 <form> 태그 사용법  (0) 2020.10.16
mybatis 환경설정 : <typeAliases>  (0) 2020.10.15
쿠키 @CookieValue  (0) 2020.10.13
HandlerInterceptor : 세션을 미리 확인하자  (0) 2020.10.12
로그인 / 로그아웃 / 세션  (0) 2020.10.12