我已尝试根据useragent更改视图的前缀。
如果请求来自IE,那么尝试将其转发给" legacy"否则"现代"文件夹中。
chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security
它完全不起作用。有人可以建议吗?
答案 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)。