Spring 移动documentation建议添加以下配置:
<mvc:annotation-driven>
<mvc:argument-resolvers>
<beans:bean class="org.springframework.mobile.device.DeviceWebArgumentResolver" />
</mvc:argument-resolvers>
</mvc:annotation-driven>
将当前的Device对象作为参数传递给
@Controller
方法。但是,可以使用:
@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
}
并绕过
<mvc:annotation-driven>
配置。然后,如何以编程方式添加
DeviceWebArgumentResolver
?解决方案(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()));
}
// ...
}
最佳答案
WebMvcConfigurerAdapter
包含一个名为addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers)
的方法
这是您需要实现的方法,但首先需要将WebArgumentResolver
(在本例中为DeviceWebArgumentResolver
)转换为HandlerMethodArgumentResolver
。为此,存在一个名为ServletWebArgumentResolverAdapter
的类。