Spring mvc拦截器addObject

wvp*_*wvp 6 spring-mvc interceptor

我有一个延伸的拦截器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());
}
Run Code Online (Sandbox Code Playgroud)

当我ModelAndView在控制器本身添加一些内容时,它不会出现在网址中.

ska*_*man 11

我怀疑控制器已返回重定向视图.当您向所使用的模型添加属性时RedirectView,Spring会将属性添加到URL.

尝试查看ModelAndView对象内部以查看视图是否为a RedirectView,如果是,则不要添加locale属性.


小智 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());
}
Run Code Online (Sandbox Code Playgroud)