BindingResult
2024. 5. 22. 01:48ㆍBack-End/Spring
Spring MVC에서 폼 데이터를 처리할 때, 데이터 바인딩과 검증은 중요한 역할을 한다. 이 과정에서 BindingResult는 매우 중요한 객체이다. BindingResult는 데이터 바인딩과 검증 결과를 보관하며, 컨트롤러에서 유효성 검증 오류를 처리할 수 있게 도와준다.
BindingResult의 역할
BindingResult는 다음과 같은 역할을 한다:
- 데이터 바인딩 결과 저장: 폼 데이터를 객체에 바인딩하는 과정에서 발생하는 오류 정보를 저장한다.
- 유효성 검증 결과 저장: 폼 데이터에 대한 유효성 검증 결과를 저장한다.
- 오류 정보 제공: 특정 필드에 오류가 있는지 여부를 확인하고, 해당 필드의 오류 메시지를 제공한다.
사용 예시
아래는 BindingResult를 사용하는 예제이다. 사용자가 제출한 폼 데이터를 검증하고, 오류가 있는 경우 오류 메시지를 사용자에게 보여준다.
1. 도메인 클래스
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
public class User {
@NotEmpty(message = "Name is required")
@Size(min = 2, max = 30, message = "Name must be between 2 and 30 characters")
private String name;
@NotEmpty(message = "Email is required")
private String email;
// Getters and Setters
// @Getter @Setter 어노테이션을 사용할 수도 있다.
}
2. 컨트롤러 클래스
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import javax.validation.Valid;
@Controller
public class UserController {
@GetMapping("/userForm")
public String showForm(Model model) {
model.addAttribute("user", new User());
return "userForm";
}
@PostMapping("/userForm")
public String submitForm(@Valid @ModelAttribute("user") User user, BindingResult bindingResult, Model model) {
if (bindingResult.hasErrors()) {
return "userForm";
}
model.addAttribute("message", "User successfully registered");
return "success";
}
}
3. Thymeleaf 템플릿 (userForm.html)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>User Form</title>
</head>
<body>
<h1>User Registration</h1>
<form action="#" th:action="@{/userForm}" th:object="${user}" method="post">
<div>
<label>Name: </label>
<input type="text" th:field="*{name}" />
<span th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Name Error</span>
</div>
<div>
<label>Email: </label>
<input type="text" th:field="*{email}" />
<span th:if="${#fields.hasErrors('email')}" th:errors="*{email}">Email Error</span>
</div>
<div>
<button type="submit">Register</button>
</div>
</form>
</body>
</html>
4. Thymeleaf 템플릿 (success.html)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Success</title>
</head>
<body>
<h1>Registration Success</h1>
<p th:text="${message}">Success Message</p>
</body>
</html>
코드 설명
- 도메인 클래스 (User):
- User 클래스는 사용자 입력을 저장하는 객체이다.
- @NotEmpty와 @Size 어노테이션을 사용하여 name과 email 필드에 대한 유효성 검증을 설정한다.
- 컨트롤러 클래스 (UserController):
- @GetMapping("/userForm") 메서드는 빈 User 객체를 모델에 추가하고 폼을 보여준다.
- @PostMapping("/userForm") 메서드는 폼 데이터를 바인딩하고 유효성을 검증한다.
- @Valid 어노테이션은 User 객체에 대한 유효성 검증을 수행한다.
- BindingResult는 유효성 검증 결과를 저장하며, 오류가 있는 경우 폼 페이지를 다시 렌더링한다.
- Thymeleaf 템플릿 (userForm.html):
- <form> 요소는 사용자 입력을 받는다.
- th:field 속성은 폼 필드를 바인딩한다.
- th:if와 th:errors 속성은 유효성 검증 오류 메시지를 표시한다.
- Thymeleaf 템플릿 (success.html):
- 사용자가 폼을 성공적으로 제출한 후에 보여지는 페이지이다.
- th:text 속성은 모델에 저장된 메시지를 표시한다.
결론
BindingResult는 Spring MVC에서 데이터 바인딩과 유효성 검증 결과를 처리하는 데 필수적인 객체이다. 이를 통해 개발자는 사용자의 폼 입력을 쉽게 검증하고, 오류 메시지를 사용자에게 명확히 전달할 수 있다. BindingResult를 활용하면 보다 견고하고 사용자 친화적인 웹 애플리케이션을 개발할 수 있다.
'Back-End > Spring' 카테고리의 다른 글
쿠키(Cookie)와 세션(Session) (0) | 2024.05.23 |
---|---|
Forward와 Redirect(스프링 MVC에서의 요청 흐름 제어) (0) | 2024.05.22 |
@Valid(스프링 MVC에서의 입력 유효성 검증) (0) | 2024.05.22 |
Thymeleaf (0) | 2024.05.21 |
Spring MVC (0) | 2024.05.18 |