[SPRING] Spring MVC 사용자 정의 메소드 매개 변수 바인딩
SPRINGSpring MVC 사용자 정의 메소드 매개 변수 바인딩
기본 스프링 MVC 매개 변수 바인딩을 사용자 정의하는 방법을 찾고있다. 이 방법을 예로 들어 보겠습니다.
@RequestMapping(value="/index.html")
public ModelAndView doIndex(@RequestParam String param) {
...
요청에서 추출하려는 String이있을 때 이것은 쉽습니다. 그러나, 나는 더 완벽한 객체를 채우기를 원한다. 그래서 나의 메소드는 다음과 같다 :
@RequestMapping(value="/index.html")
public ModelAndView doIndex(Foo bar) {
...
내가 찾고있는 것은 이와 같은 바인딩을 선언하는 방법입니다.
@RequestMapping(value="/index.html")
public ModelAndView doIndex(@FooPopulator Foo bar) {
...
그리고 이것을하는 다른 종류의 구현 자 (@FooPopulator 어노테이션으로 결정됨)가 있습니다 :
public void doBind(Foo target, ServletRequest originalRequest) {
target.setX(this.computeStuffBasedOn(originalRequest));
target.sety(y);
}
지금까지 @InitBinderbinder 주석에 대해 알았지 만,이 장면에 대한 올바른 선택인지 여부는 확실하지 않습니다.
가장 좋은 방법은 뭔가요?
해결법
-
==============================
1.많이 쉽다. PropertyEditors와 같은 방식으로 작동하지만 상태가없는 변환기를 사용할 수 있습니다.
많이 쉽다. PropertyEditors와 같은 방식으로 작동하지만 상태가없는 변환기를 사용할 수 있습니다.
5.5 장 스프링 3 타입 변환 (Spring reference).
이러한 컨버터가 한 번 등록 된 경우 추가 정보가 필요하지 않습니다.
@RequestMapping(value="/index.html") public ModelAndView doIndex(@RequestParam Foo param) {
예를 들어 id로 객체를로드하는 간단한 변환기는 다음과 같습니다.
@Component @CustomConverter //custom qualifyer public class BUdToUserConverter implements Converter<String, User> { @Resource private UserDao userDao; @Override public User convert(String source) { Integer id = Integer.parse(source); return this.userDao.getByBusinessId(id); } }
모든 빈을 @CustomConverter 주석으로 등록하는 "도우미"
public class ApplicationConversionServiceFactoryBean extends FormattingConversionServiceFactoryBean { @Resource @CustomConverter private List<Converter<?, ?>> customConverter; @Override protected void installFormatters(final FormatterRegistry registry) { super.installFormatters(registry); for (Converter<?, ?> converter : customConverter) { registry.addConverter(converter); } } }
이것을 어떻게 사용 하는가
UserController { ... @RequestMapping(value = "/{id}", method = RequestMethod.GET) public ModelAndView show(@PathVariable("id") User user) { return new ModelAndView("users/show", "user", user); } }
-
==============================
2.문제에 대한 "올바른"해결책을 찾았습니다. Spring은 이미이 시나리오를 위해 WebArgumentResolver를 제공합니다.
문제에 대한 "올바른"해결책을 찾았습니다. Spring은 이미이 시나리오를 위해 WebArgumentResolver를 제공합니다.
http://sergialmar.wordpress.com/2011/03/29/extending-handler-method-argument-resolution-in-spring-mvc/
http://scottfrederick.blogspot.com/2011/03/customizing-spring-3-mvcannotation.html
from https://stackoverflow.com/questions/6519322/spring-mvc-customized-method-parameter-binding by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 주석이있는 Map에서 Enum 키를 설정하는 방법 (0) | 2019.01.29 |
---|---|
[SPRING] 통합 테스트를위한 스프링 부트 기본 프로파일 (0) | 2019.01.28 |
[SPRING] Spring 부트 : CommonMultipartResolver의 maxUploadSize를 구성 할 때 ClassNotFoundException이 발생합니다. (0) | 2019.01.28 |
[SPRING] 스프링의 @RequestBody 및 @RequestParam 학습 (0) | 2019.01.28 |
[SPRING] Flex 4 마이그레이션 경험이 있습니까? (0) | 2019.01.28 |