ProperyEditor

사용 예제

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();	
	}
}
  1. /event/1, /event/2 와 같은 방식으로 id를 요청할 것이다.
  2. id를 Event 객체에 할당하여 사용하려고 한다.

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();	
	}
}