Spring/Spring MVC

[Spring MVC] 5. @InitBinder

noahkim_ 2023. 10. 17. 01:41

1. @InitBinder

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

 

WebDataBinder

  • 스프링의 데이터 바인딩과 유효성 검사 기능을 제공합니다.
  • 설정을 조정하여 특정 데이터 형식이나 커스텀 타입을 제대로 처리할 수 있습니다.
항목 설명
문자열 기반 요청 값 변환
요청 파라미터, 경로 변수, 헤더, 쿠키 등의 문자열 값을 컨트롤러 메서드의 타겟 타입으로 변환
적용 대상
- 요청 파라미터
- 경로 변수 (PathVariable)
- 헤더 값 (RequestHeader)
- 쿠키 값 (CookieValue)
요청 파라미터 바인딩
클라이언트로부터의 요청 파라미터를 모델 객체에 바인딩
모델 객체 값 포맷팅
HTML 폼 렌더링 시, 모델 객체의 값을 문자열로 변환하여 출력 (예: @ModelAttribute로 전달된 데이터 포맷)
예시
- 요청 파라미터 @RequestParam으로 바인딩
- 경로 변수 @PathVariable로 바인딩
- 객체에 자동으로 값을 할당하는 @ModelAttribute

 

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 메서드를 선언할 수 있습니다.
  • 전역 범위에서 동작하여 모든 컨트롤러에서 해당 설정을 사용하게 됩니다.

 

 

출처