3 votes

Redirection HTTP : 301 (permanent) vs. 302 (temporaire) dans Spring

Je veux faire une redirection 301 dans Spring, donc voici le morceau de code que j'utilise

@RequestMapping(value = { "/devices" } , method = RequestMethod.GET)
    private String initGetForm(@ModelAttribute("searchForm") final SearchForm searchForm,
                            BindingResult result, 
                            HttpServletRequest request,
                            HttpServletResponse response,
                            Model model, Locale locale) throws Exception {

        String newUrl = "/devices/en";

        response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
        response.setHeader("Location", newUrl);
        response.setHeader("Connection", "close");

        return "redirect:" + newUrl;

}

Mais en vérifiant les outils de développement d'IE, j'ai obtenu ceci Statut 302 Déplacé temporairement !

6voto

ekem chitsiga Points 3232

Spring réinitialise vos en-têtes de réponse lorsqu'il gère la redirection puisque vous renvoyez un nom de vue logique avec un préfixe de redirection spécial. Si vous voulez définir manuellement les en-têtes, gérez la réponse vous-même sans utiliser la résolution de vue de Spring. Modifiez votre code comme suit

@RequestMapping(value = { "/devices" } , method = RequestMethod.GET)
private void initGetForm(@ModelAttribute("searchForm") final SearchForm searchForm,
                                BindingResult result, 
                                HttpServletRequest request,
                                HttpServletResponse response,
                                Model model, Locale locale) throws Exception {

            String newUrl = request.getContextPath() + "/devices/en";
            response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
            response.setHeader("Location", newUrl);
            response.setHeader("Connection", "close");

    }

4voto

Braj Points 28874

Vous pouvez utiliser RedirectView con REDIRECTION TEMPORAIRE statut.

@RequestMapping(value = { "/devices" } , method = RequestMethod.GET)
private ModelAndView initGetForm(@ModelAttribute("searchForm") final SearchForm searchForm,
                            BindingResult result, 
                            HttpServletRequest request,
                            HttpServletResponse response,
                            Model model, Locale locale) throws Exception {
    ....
    RedirectView redirectView = new RedirectView(url);
    redirectView.setStatusCode(HttpStatus.TEMPORARY_REDIRECT);
    return new ModelAndView(redirectView);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X