Я использую spring 3.x и tomcat 7 У меня есть контроллер со звездочкой, у которого есть метод, который определяет путь перенаправления. здесь:Избегайте перенаправления 302 по методу запроса контроллера
@RequestMapping(value = "/**/t")
public class TopCategoryPageController extends AbstractSearchPageController
{
...
//@ResponseStatus(HttpStatus.MOVED_PERMANENTLY/* this is 301 */)
@RequestMapping(value = TOP_CATEGORY_CODE_PATH_VARIABLE_PATTERN, method = RequestMethod.GET)
public String topCategory(@PathVariable("categoryCode") final String categoryCode, final Model model,
final HttpServletRequest request, final HttpServletResponse response)
throws UnsupportedEncodingException, CMSItemNotFoundException
{
...
if any redirection
{
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
return redirection;
}
else
return getViewForPage(categoryCode);
}
Когда приходит запрос, он выполняет первый topCategory выше метод
Кроме того, у меня есть перехватчик, например, как показано ниже. Он выполняется после метода topCategory, как и ожидалось. Хотя я пытался вставить 301 статус там, я не мог получить то, что хочу.
Здесь:
public class BeforeViewHandlerInterceptor extends HandlerInterceptorAdapter
{
...
public void postHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler,
final ModelAndView modelAndView) throws Exception
{
...
if (isRedirectView(modelAndView))
{
String uri = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ request.getContextPath();
uri += modelAndView.getViewName().substring(modelAndView.getViewName().indexOf(":") + 1,
modelAndView.getViewName().length());
modelAndView.setViewName("redirect:" + uri);
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", response.encodeRedirectURL(uri));
}
}
Neverthless установка 301 статус в postHandle. Он по-прежнему перенаправляется с 302.
Это ссылка, которую я нажал на своей странице: domain/context/t/categoryCode Когда я анализирую вкладку chrome network, я вижу первое перенаправление с 302 с другим инициатором. Второй - 301. Обратите внимание, что мне нужно сделать его перенаправлением вначале 301. Таким образом, я не смог найти место, где он перенаправляет с помощью 302. Thx и brgds