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);
}
}