Spring Mobile: how to programmatically add DeviceWebArgumentResolver?

Spring mobile documentation suggests adding the following configuration:

<mvc:annotation-driven> <mvc:argument-resolvers> <beans:bean class="org.springframework.mobile.device.DeviceWebArgumentResolver" /> </mvc:argument-resolvers> </mvc:annotation-driven> 

pass the current Device object as an argument to @Controller methods.

However, you can use:

 @EnableWebMvc @Configuration public class WebConfig extends WebMvcConfigurerAdapter { } 

and bypass the <mvc:annotation-driven> configuration.

Then how to programmatically add DeviceWebArgumentResolver ?

Solution (Luciano):

 @EnableWebMvc @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addArgumentResolvers( List<HandlerMethodArgumentResolver> argumentResolvers) { // Adding Spring mobile argument resolvers argumentResolvers.add( new ServletWebArgumentResolverAdapter( new DeviceWebArgumentResolver())); argumentResolvers.add( new ServletWebArgumentResolverAdapter( new SitePreferenceWebArgumentResolver())); } // ... } 
+7
source share
1 answer

WebMvcConfigurerAdapter contains a method called addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers)

This is the method you need to implement, but first you need to convert the WebArgumentResolver (in this case, DeviceWebArgumentResolver ) to HandlerMethodArgumentResolver . To do this, there is a class called ServletWebArgumentResolverAdapter .

+5
source

All Articles