더북(TheBook)

13.4.3 @InitBinder를 선언한 메서드 추가

컨트롤러의 메서드 내에 바인딩되는 데이터의 유효성 검사를 하려면 매개변수에 @Valid를 선언하여 커맨드 객체의 속성 값을 전달받습니다. 그리고 @InitBinder 메서드를 정의하고 해당 메서드의 입력 매개변수로 전달된 WebDataBinder 객체를 사용하여 해당 Validator 인터페이스의 구현체를 설정합니다. @InitBinder가 선언된 메서드에 Validator를 미리 등록하면 해당 컨트롤러의 모든 메서드에서 유효성 검사 기능을 사용할 수 있기 때문에 편리합니다.

@InitBinder 메서드를 정의하여 생성한 Validator 인터페이스의 구현체 BookValidator를 설정한 예를 살펴보겠습니다.

@InitBinder를 적용한 예

package com.springmvc.chap13;
...
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;

@Controller
@RequestMapping("/exam03")
public class Example03Controller {

    @Autowired
    private PersonValidator personValidator;

    @GetMapping
    public String showForm(Model model) {
        model.addAttribute("person", new Person());
        return "webpage13_03";
    }

    @PostMapping
    public String submit(@Valid @ModelAttribute Person person, BindingResult result) {
        if (result.hasErrors()) {
            return "webpage13_03";
        }
        return "webpage13_result";
    }

    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.setValidator(personValidator);
    }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.