我有一个延伸HandlerInterceptorAdapter
的拦截器。
当我向ModelAndView
添加一个对象时,它也会作为路径变量添加到我的url中,但我不希望这样。
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
if (null == modelAndView) {
return;
}
log.info("Language in postHandle: {}", LocaleContextHolder.getLocale());
modelAndView.addObject("selectedLocale", LocaleContextHolder.getLocale());
}
当我在控制器本身的ModelAndView
中添加内容时,它不会显示在网址中。
答案 0 :(得分:11)
我怀疑控制器已返回重定向视图。当您向RedirectView
使用的模型添加属性时,Spring会将属性添加到URL。
尝试查看ModelAndView
对象内部以查看该视图是否为RedirectView
,如果是,则不要添加语言环境属性。
答案 1 :(得分:7)
试试这个
import static org.springframework.web.servlet.view.UrlBasedViewResolver.REDIRECT_URL_PREFIX;
private boolean isRedirectView(ModelAndView mv) {
String viewName = mv.getViewName();
if (viewName.startsWith(REDIRECT_URL_PREFIX)) {
return true;
}
View view = mv.getView();
return (view != null && view instanceof SmartView
&& ((SmartView) view).isRedirectView());
}
答案 2 :(得分:1)
我编辑了代码并添加了一个检查是否是RedirectView。如果不是,我将添加其他模型对象。
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
if (null == modelAndView) {
return;
}
log.info("Language in postHandle: {}", LocaleContextHolder.getLocale());
if(!(modelAndView.getView() instanceof RedirectView)) {
addAdditionalModelObjects(request, modelAndView);
}
}
答案 3 :(得分:0)
我在请求中使用了setAttribute而不是解决这个问题
request.setAttribute("jsFiles", children);