BindingResult

2024. 5. 22. 01:48Back-End/Spring

Spring MVC에서 폼 데이터를 처리할 때, 데이터 바인딩과 검증은 중요한 역할을 한다. 이 과정에서 BindingResult는 매우 중요한 객체이다. BindingResult는 데이터 바인딩과 검증 결과를 보관하며, 컨트롤러에서 유효성 검증 오류를 처리할 수 있게 도와준다.

 

BindingResult의 역할

BindingResult는 다음과 같은 역할을 한다:

  1. 데이터 바인딩 결과 저장: 폼 데이터를 객체에 바인딩하는 과정에서 발생하는 오류 정보를 저장한다.
  2. 유효성 검증 결과 저장: 폼 데이터에 대한 유효성 검증 결과를 저장한다.
  3. 오류 정보 제공: 특정 필드에 오류가 있는지 여부를 확인하고, 해당 필드의 오류 메시지를 제공한다.

사용 예시

아래는 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>

 

코드 설명

  1. 도메인 클래스 (User):
    • User 클래스는 사용자 입력을 저장하는 객체이다.
    • @NotEmpty와 @Size 어노테이션을 사용하여 name과 email 필드에 대한 유효성 검증을 설정한다.
  2. 컨트롤러 클래스 (UserController):
    • @GetMapping("/userForm") 메서드는 빈 User 객체를 모델에 추가하고 폼을 보여준다.
    • @PostMapping("/userForm") 메서드는 폼 데이터를 바인딩하고 유효성을 검증한다.
    • @Valid 어노테이션은 User 객체에 대한 유효성 검증을 수행한다.
    • BindingResult는 유효성 검증 결과를 저장하며, 오류가 있는 경우 폼 페이지를 다시 렌더링한다.
  3. Thymeleaf 템플릿 (userForm.html):
    • <form> 요소는 사용자 입력을 받는다.
    • th:field 속성은 폼 필드를 바인딩한다.
    • th:if와 th:errors 속성은 유효성 검증 오류 메시지를 표시한다.
  4. 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