Spring/Spring MVC

[Spring MVC] 2-3. Handler Methods: DataBinder

noahkim_ 2023. 10. 17. 01:41

1. @InitBinder

  • WebDataBinder 객체를 초기화하는 데 사용되는 메서드를 표시하는 어노테이션입니다.
  • 컨트롤러에서 요청 데이터의 바인딩과 변환을 제어하고 사용자 정의하는데 유용한 도구입니다.

 

WebDataBinder

  • 스프링의 데이터 바인딩과 유효성 검사 기능을 제공합니다.
  • 설정을 조정하여 특정 데이터 형식이나 커스텀 타입을 제대로 처리할 수 있습니다.

 

기능

문자열 기반 요청 값 변환
  • 문자열 기반 요청 값을 컨트롤러 메서드의 타겟 타입으로 변환합니다.
  • 요청 파라미터, 경로 변수, 헤더, 쿠키 등

 

요청 파라미터 바인딩
  • 클라이언트로부터의 요청 파라미터를 모델 객체에 바인딩합니다.

 

모델 객체 값 포맷팅
  • HTML 폼을 렌더링 할 때 모델 객체 값을 문자열로 포맷합니다.

 

2. PropertyEditor, Converter, Formatter 등록

  • @InitBinder 메서드를 통해 컨트롤러에 특정 변환기를 등록할 수 있습니다.

 

PropertyEditor

@Controller
public class FormController {

	@InitBinder
	public void initBinder(WebDataBinder binder) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		dateFormat.setLenient(false);
		binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
	}

	// ...
}
  • 날짜 문자열을 Date 객체로 변환
  • SimpleDateFormat을 사용하는 CustomDateEditor를 WebDataBinder에 등록합니다.

 

Formatter

@Controller
public class FormController {

	@InitBinder
	protected void initBinder(WebDataBinder binder) {
		binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd"));
	}

	// ...
}
  • 날짜 문자열을 Date 객체로 변환
  • DateFormatter 포맷터를 등록합니다.

 

3. @ControllerAdvice와의 관계

  • @ControllerAdvice 클래스에 @InitBinder 메서드를 선언할 수 있습니다.
  • 전역 범위에서 동작하여 모든 컨트롤러에서 해당 설정을 사용하게 됩니다.

 

 

출처