Spring自定义视图解析器

时间:2017-09-29 05:28:20

标签: spring spring-mvc spring-annotations

我已尝试根据useragent更改视图的前缀。

如果请求来自IE,那么尝试将其转发给" legacy"否则"现代"文件夹中。

chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security

它完全不起作用。有人可以建议吗?

1 个答案:

答案 0 :(得分:0)

不要在ViewResolver写一个HandlerInterceptor来反击。

public class BrowserPrefixHandlerInterceptor extends HandlerInterceptorAdapter {

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
        throws Exception {

        if(request.getHeader("User-Agent").contains("Internet Explorer")){
           modelAndView.setViewName("legacy/" + modelAndView.getViewName());
       } else {
           modelAndView.setViewName("modern/" + modelAndView.getViewName());
       }
    }
}

然后注册就像一个普通的拦截器。

@Configuration
public YourWebConfiguration extends WebMvcConfigurerAdapter {

    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new BrowserPrefixHandlerInterceptor());
    }
}

只留下ViewResolver。这适用于每个ViewResolver,而不仅仅适用于您自己的自定义版本。您可能希望使拦截器更智能一些(检查是否实际存在viewName并且可能会跳过某些URL)。