자바에서는 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 |