Programming/Spring

Argument Resolver

Albothyl 2019. 3. 27. 21:00

1. create some argument resolver class

import org.springframework.core.MethodParameter;
import org.springframework.mobile.device.Device;
import org.springframework.mobile.device.DeviceResolver;
import org.springframework.mobile.device.LiteDeviceResolver;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;

import javax.servlet.http.HttpServletRequest;

public class SomeArgumentResolver implements HandlerMethodArgumentResolver {

    private final DeviceResolver deviceResolver = new LiteDeviceResolver();

    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return Device.class.isAssignableFrom(parameter.getParameterType());
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        final Device device = deviceResolver.resolveDevice(webRequest.getNativeRequest(HttpServletRequest.class));
        return device;
    }
}

 

2. create some argument  resolver bean

@Bean
public SomeAugumentResolver someAugumentResolver() {
    return new SomeAugumentResolver();
}

 

3. regiest some argument resolver

public class SomeConfiguration extend WebMvcConfigurerAdapter {
	...

	@Override
	public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
    	argumentResolvers.add(someAugumentResolver());
	}
}

argument resolver는 controller에서 사용할 객체나 데이터를 전처리 할 때 사용한다.