Spring Mobile:如何以编程方式添加DeviceWebArgumentResolver?

Jér*_*nge 7 java configuration spring-mobile

Spring移动文档建议添加以下配置:

<mvc:annotation-driven>
    <mvc:argument-resolvers>
        <beans:bean class="org.springframework.mobile.device.DeviceWebArgumentResolver" />
    </mvc:argument-resolvers>
</mvc:annotation-driven>
Run Code Online (Sandbox Code Playgroud)

将当前的Device对象作为参数传递给@Controller方法.

然而,人们可以使用:

@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

}
Run Code Online (Sandbox Code Playgroud)

和旁路<mvc:annotation-driven>配置.

那么,如何以DeviceWebArgumentResolver编程方式添加?

解决方案(卢西亚诺):

@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()));

    }

    // ...

}
Run Code Online (Sandbox Code Playgroud)

Luc*_*ano 5

WebMvcConfigurerAdapter 包含一个名为的方法 addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers)

这是您需要实现的方法,但首先需要将a WebArgumentResolver(在本例中DeviceWebArgumentResolver)转换为a HandlerMethodArgumentResolver.为此,存在一个名为的类ServletWebArgumentResolverAdapter.

  • 从1.1.0.M1版本开始,Spring Mobile现在包含一个`DeviceHandlerMethodArgumentResolver`来支持基于Java的配置. (2认同)