Установите код состояния HTTP для перенаправления при возврате строки в контроллере Spring 3.

Есть ли способ указать код состояния HTTP при возврате "redirect:/new/url" в Spring 3?


person at.    schedule 09.09.2011    source источник


Ответы (2)


Не пробовал, но, глядя на источник org.springframework.web.servlet.view.RedirectView, у него есть метод getHttp11StatusCode(), который определяет статус ответа HTTP.

Похоже, вы можете переопределить код ответа по умолчанию, настроив свойство org.springframework.web.servlet.View#RESPONSE_STATUS_ATTRIBUTE по запросу. Просто установите:

httpServletRequest.setAttribute(View.RESPONSE_STATUS_ATTRIBUTE, status)

прежде чем вернуться с видом "redirect:".

person Tomasz Nurkiewicz    schedule 09.09.2011
comment
Это не работает и, возможно, никогда не работало;) jira.spring.io/browse/SPR-12719< /а> - person Scolytus; 17.02.2015

Как отметил Scolytus, вы должны вернуть RedirectView с набором statusCode. Использование префикса "redirect:" всегда приводит к статусу HttpStatus.MOVED_TERMPORARILY (302).

Если вам нужна возможность возвращать String из метода вашего контроллера, а также RedirectView, вы должны изменить сигнатуру метода, чтобы она возвращала Object. Пример:

@RequestMapping
public Object someMethod() {
    if (doRedirect) {
        RedirectView rv = new RedirectView("/new/url");
        rv.setStatusCode(HttpStatus.MOVED_PERMANENTLY); // set our own status code
        return rv;
    } else {
        return "someView";
    }
}
person Aaron Blenkush    schedule 17.06.2016