사용 예제
public class Event {
private Integet id;
private String title;
public Event(Integer id) {
this.id = id;
}
}
@RestController
public class EventController {
@GetMapping("/event/{event}")
public String getEvent(@PathVariable Event event) {
System.out.println(event);
return event.getId().toString();
}
}
property editor
public class EventEditor extends PropertyEditorSupport {
@Override
public String setAsText(String text) throws IllegalArgumentException {
setValue(new Event(Integer.parseInt(text)));
}
}
getValue()
, setValue()
가 서로 다른 스레드에 공유가 된다. 그렇기 때문에 스레드-세이프 하지 않다. 그렇기 때문에 EventEditor
를 절대 빈에 등록해서 쓰면 안된다. (싱글톤 이기 때문에) 스레드 스코프 빈이면 그나마 괜찮지만 빈에 등록 하지 않는 것을 추천한다.
사용 방법
@RestController
public class EventController {
@InitBinder
public void init(WebDataBinder webDataBinder) {
webDataBinder.registerCustomEditor(Event.class, new EventEditor());
}
@GetMapping("/event/{event}")
public String getEvent(@PathVariable Event event) {
System.out.println(event);
return event.getId().toString();
}
}