-
데이터 바인딩 추상화: PropertyEditorSPRING/스프링프레임워크 핵심개념 2021. 5. 19. 20:24
Property의 값을 Target 객체 설정하는 기능을 데이터 바인딩이라고 한다.
사용자 관점에서 보자면 사용자 입력값을 애플리케이션 도메인 모델에 동적으로 변환해 넣어주는 기능
EX:) 입력값은 String인데, 입력값을 int, long, Boolean, Date 등 또는 Event, Book 같은 도메인 타입으로 변환해서 넣음.
PropertyEditor
- 스프링 3.0 이전까지 DataBinder가 변환 작업 사용하던 인터페이스
- 쓰레드-세이프 하지 않음. (싱글톤 빈으로 등록해서 사용 X)
- Object와 String 간의 변환만 가능하기 때문에 사용 범위가 제한적임.
- PropertyEditor를 implements하여 직접 Editor를 구현할 수도 있지만, PropertyEditorsupport를 사용하면 원하는 메서드만 사용이 가능하다.
public class Event { private Integer id; private String title; public Event(Integer id) { this.id = id; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } }
@RestController public class EventController { @InitBinder public void init(WebDataBinder webDataBinder) { webDataBinder.registerCustomEditor(Event.class, new EventEditor()); // Event Class를 처리하는 DataBinder } @GetMapping("/event/{event}") public String getEvent(@PathVariable Event event) { System.out.println(event); return event.getId().toString(); } }
public class EventEditor extends PropertyEditorSupport { @Override public String getAsText() { Event event = (Event) getValue(); return event.getId().toString(); } @Override public void setAsText(String text) throws IllegalArgumentException { setValue(new Event(Integer.parseInt(text))); } }
- 아래 테스트 케이스를 통해 테스트가 가능하다.
@RunWith(SpringRunner.class) @WebMvcTest public class EventControllerTest { @Autowired MockMvc mockMvc; @Test public void getTest() throws Exception { mockMvc.perform(get("/event/1")) .andExpect((status().isOk())) .andExpect(content().string("1")); } }
'SPRING > 스프링프레임워크 핵심개념' 카테고리의 다른 글
SPEL(스프링 Expresssion Language) (0) 2021.05.23 데이터 바인딩 추상화 : Converter와 Formatter (0) 2021.05.23 Validation추상화 (0) 2021.05.19 Resource 추상화 (0) 2021.05.18 ResourceLoader (0) 2021.05.17