HandlerMethodArgumentResolver
:
- 컨트롤러에서 파라미터를 바인딩 해주는 역할을한다.
- 리퀘스트의 파라미터를 다른 클래스의 인스턴스나 값으로 변환할 수 있다.
- 리퀘스트의 공통된 로직을 분리할 수 있다.
데이터 정의 :
- 맵을 상속받으면 안된다.
public class RequestParam {
String param;
public RequestParam(String parameter) {
this.param = parameter;
}
public String getParam() {
return param;
}
}
HandlerMethodArgumentResolver 구현 :
public class RequestParamResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return RequestParam.class.isAssignableFrom(parameter.getParameterType());
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
return new RequestParam(webRequest.getParameter("param"));
}
}
ArgumentResolver 등록 :
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new RequestParamResolver());
}
}
컨트롤러에서 사용 :
@RestController
public class RequestController {
@GetMapping("test")
public RequestParam testRequestParam(RequestParam param){
return param;
}
}