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

7

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

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

将当前的设备对象作为参数传递给@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()));

    }

    // ...

}
1个回答

5

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

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


2
从1.1.0.M1版本开始,Spring Mobile现在包括一个DeviceHandlerMethodArgumentResolver以支持基于Java的配置。 - Roy Clarkson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接