J'ai remarqué que le code suivant redirige l'utilisateur vers une URL à l'intérieur du 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 veux que la redirection soit toujours redirigée vers l'URL spécifiée, qu'elle contienne ou non un protocole valide et ne souhaite pas rediriger vers une vue. Comment puis je faire ça?
Merci,
java
spring
jsp
spring-mvc
Jake
la source
la source
@ResponseStatus(HttpStatus.FOUND)
Vous pouvez utiliser le
RedirectView
. Copié à partir du JavaDoc :Exemple:
Vous pouvez également utiliser un
ResponseEntity
, par exempleEt bien sûr, revenez
redirect:http://www.yahoo.com
comme mentionné par d'autres.la source
En examinant l' implémentation réelle de UrlBasedViewResolver et RedirectView, la redirection sera toujours contextRelative si votre cible de redirection commence par /. Donc, envoyer également un //yahoo.com/path/to/resource n'aiderait pas à obtenir une redirection relative au protocole.
Donc, pour réaliser ce que vous essayez, vous pouvez faire quelque chose comme:
la source
Une autre façon de le faire est simplement d'utiliser la
sendRedirect
méthode:la source
Vous pouvez le faire de manière assez concise en utilisant
ResponseEntity
comme ceci:la source
Pour moi fonctionne bien:
la source
Pour l'url externe, vous devez utiliser " http://www.yahoo.com " comme URL de redirection.
Ceci est expliqué dans la redirection: préfixe de la documentation de référence de Spring.
redirigera par rapport au contexte actuel du servlet, tandis qu'un nom tel que
redirigera vers une URL absolue
la source
Avez-vous essayé RedirectView où vous pouvez fournir le paramètre contextRelative?
la source
/
pour vérifier s'il doit être relatif au contexte de l'application Web. La demande de redirection sera toujours pour le même hôte.En bref
"redirect://yahoo.com"
vous prêterayahoo.com
.où comme
"redirect:yahoo.com"
vous prêterayour-context/yahoo.com
ie pour ex-localhost:8080/yahoo.com
la source