본문 바로가기
공부/프로그래밍

[Spring] 컨트롤에 들어오는 파라미터나 리턴 지정(Resolver)

by demonic_ 2017. 5. 30.
반응형

스프링 컨트롤에 들어오는 파라미터나 리턴타입을 프로젝트에 맞게 가공해서 사용할때 사용.

(커스텀 ArgumentResolver 등록하기)


여기서는 request 파라미터를 수집하여 Map 형태로 하는 클래스를 만들어서 등록한다.


다음의 클래스를 생성한다.

아래 클래스는 파라미터를 수집하여 담고있을 클래스다.

public class CustomMap { 

Map<String, String> map = new HashMap<String, String>(); 

public String get(String key){ 

return map.get(key); 

public void put(String key, String value){ 

map.put(key, value); 

public String toString() { 

return map.toString(); 

}

}



다음 클래스는 HandlerMethodArgumentResolver 를 상속받아 위에서 생성한 CustomMap에 담는 역할을 하는 클래스다.

public class CustomArgumentResolver implements HandlerMethodArgumentResolver {

@Override public boolean supportsParameter(MethodParameter parameter) { 

// CustomMap.

return CustomMap.class.isAssignableFrom(parameter.getParameterType());

}

@Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer

, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {

CustomMap collector = new CustomMap(); 

for(Iterator<String> iterator = webRequest.getParameterNames(); iterator.hasNext();){

String key = iterator.next(); collector.put(key, webRequest.getParameter(key)); 

return collector; 

}

}



만든 CustomArgumentResolver클래스를 resolver에 등록하기 위해스프링 xml 파일에 다음과 같이 설정한다.

<annotation-driven>

<argument-resolvers>

<beans:bean class="com.test.config.CustomArgumentResolver"></beans:bean>

</argument-resolvers>

</annotation-driven>



이렇게 해둔다음 컨트롤러에서 다음과 같이 설정하면 데이터가 들어온다.

@RequestMapping("/index") 

public void index(CustomMap collector)

System.out.println(collector); 

}




반응형

댓글