java - restcontroller - thymeleaf redirect




Rediriger vers une URL externe à partir de l'action du contrôleur dans Spring MVC (6)

J'ai remarqué que le code suivant redirige l'utilisateur vers une URL dans le projet,

@RequestMapping(method = RequestMethod.POST)
public String processForm(HttpServletRequest request, LoginForm loginForm, 
                          BindingResult result, ModelMap model) 
{
    String redirectUrl = "yahoo.com";
    return "redirect:" + redirectUrl;
}

alors que ce qui suit redirige correctement comme prévu, mais nécessite http: // ou https: //

@RequestMapping(method = RequestMethod.POST)
    public String processForm(HttpServletRequest request, LoginForm loginForm, 
                              BindingResult result, ModelMap model) 
    {
        String redirectUrl = "http://www.yahoo.com";
        return "redirect:" + redirectUrl;
    }

Je souhaite que la redirection redirige toujours vers l'URL spécifiée, qu'elle contienne ou non un protocole valide et que vous ne souhaitiez pas rediriger vers une vue. Comment puis je faire ça?

Merci,


Avez-vous essayé RedirectView où vous pouvez fournir le paramètre contextRelative?


En bref "redirect:yahoo.com" ou "redirect://yahoo.com" vous prêtera à yahoo.com .

"redirect:yahoo.com" vous prêtera your-context/yahoo.com c'est-à-dire ex- localhost:8080/yahoo.com


Pour l'URL externe, vous devez utiliser " http://www.yahoo.com " comme URL de redirection.

Ceci est expliqué dans le préfixe redirect: de la documentation de référence Spring.

rediriger: / myapp / some / resource

redirigera par rapport au contexte Servlet actuel, tandis qu'un nom tel que

rediriger: http://myhost.com/some/arbitrary/path

redirigera vers une URL absolue


Pour moi, ça marche bien:

@RequestMapping (value = "/{id}", method = RequestMethod.GET)
public ResponseEntity<Object> redirectToExternalUrl() throws URISyntaxException {
    URI uri = new URI("http://www.google.com");
    HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.setLocation(uri);
    return new ResponseEntity<>(httpHeaders, HttpStatus.SEE_OTHER);
}

Vous pouvez le faire de deux façons.

Premier:

    @RequestMapping(value = "/redirect", method = RequestMethod.GET)
    public void method(HttpServletResponse httpServletResponse) {
        httpServletResponse.setHeader("Location", projectUrl);
    }

Seconde:

    @RequestMapping(value = "/redirect", method = RequestMethod.GET)
    public ModelAndView method() {
            return new ModelAndView("redirect:" + projectUrl);

    }

Vous pouvez utiliser le RedirectView . Copié à partir du JavaDoc :

Afficher qui redirige vers une URL relative absolue, contextuelle ou relative à la requête en cours

Exemple:

@RequestMapping("/to-be-redirected")
public RedirectView localRedirect() {
    RedirectView redirectView = new RedirectView();
    redirectView.setUrl("http://www.yahoo.com");
    return redirectView;
}

Vous pouvez également utiliser une ResponseEntity , par exemple

@RequestMapping("/to-be-redirected")
public ResponseEntity<Object> redirectToExternalUrl() throws URISyntaxException {
    URI yahoo = new URI("http://www.yahoo.com");
    HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.setLocation(yahoo);
    return new ResponseEntity<>(httpHeaders, HttpStatus.SEE_OTHER);
}

Et bien sûr, renvoyez la redirect:http://www.yahoo.com comme mentionné par d'autres.





spring-mvc