본문 바로가기

스프링/스프링 MVC

데이터 바인더: @InitBinder

@InitBinder

특정 컨트롤러에서 바인딩 또는 검증 설정을 변경하고 싶을 때 사용한다.

바인딩 설정

event의 id값은 데이터 바인더를 통해 받아오지 않게 하기

  • 이벤트 클래스와 resources/templates/events/ 에 form.html을 이렇게 작성하였다.

 

  • 모델을 통해 뷰에게 넘겨주고 그것을 Postmapping으로 받아오는 컨트롤러를 작성하였다.

 

  • 디버그 모드로 웹을 띄우고 event값을 확인하면 모든 값이 제대로 전달된 것을 알 수 있다.

데이터 바인더 적용

  • @InitBinder를 이용해 데이터 바인더를 적용한 후 id를 setDisallowedFields에 추가한다.

 

  • 그리고 동일하게 디버그 모드로 웹을 띄워서 데이터를 전송해보면 id값은 걸러진 것을 알 수 있다.
  • 아래와 같이 InitBinder("event")라고 적으면 event의 Attribute에만 데이터 바인더를 적용할 수 있다.


포매터 설정

  • 원하는 포매터를 만들고 webDataBinder.addCustomFormatter()를 통해 추가할 수 있다.
  • 기본적으로 포매터가 추가되어 있는 LocalDate로 확인할 수 있다.

 

  • 주석처럼 pattern으로 할 수 있지만 ISO를 이용해 Type-Safe 하게 사용할 수 있다.

 

  • form.html에 startDate를 추가하고 디버그 모드로 실행시켜 데이터를 전송해보면 이렇게 String이 아닌 LocalDate 타입으로 값이 변한 된 것을 알 수 있다.
  • 기본적으로 추가되어 있는 포매터가 이렇게 해주는 것이다.

Validator 설정

  • 원하는 Validator를 설정해보자.

  • Validator를 구현하는 EventValidator를 만든다. validate()에서 직접 검증을 할 수 있다. event의 name이 aaa일 경우 에러를 추가하였다.

 

  • InitBider에 Validaor를 추가하고 디버그 모드로 돌려본다.

 

  • name에 aaa를 넣고 데이터를 전송하면 이렇게 검증이 이루어지는 것을 알 수 있다.

Validator를 빈으로 등록하여 사용하기

  • validator를 구현하지 않고 그냥 이렇게 빈으로 등록 후 검증 메서드를 만든다.

 

  • Controller에서 Bean으로 등록한 EventValidator를 통해 따로 InitBinder에 추가하지 않고도 사용이 가능하다.

참고자료