He notado que el siguiente código redirige al usuario a una URL dentro del proyecto,
@RequestMapping(method = RequestMethod.POST)
public String processForm(HttpServletRequest request, LoginForm loginForm,
BindingResult result, ModelMap model)
{
String redirectUrl = "yahoo.com";
return "redirect:" + redirectUrl;
}
mientras que lo siguiente redirige correctamente según lo previsto, pero requiere http: // o 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;
}
Quiero que la redirección siempre redirija a la URL especificada, ya sea que tenga un protocolo válido o no y no quiero redirigir a una vista. ¿Cómo puedo hacer eso?
Gracias,
java
spring
jsp
spring-mvc
Jake
fuente
fuente
@ResponseStatus(HttpStatus.FOUND)
Puede utilizar el
RedirectView
. Copiado de JavaDoc :Ejemplo:
También puede utilizar
ResponseEntity
, por ejemplo,Y por supuesto, vuelve
redirect:http://www.yahoo.com
como han mencionado otros.fuente
Al analizar la implementación real de UrlBasedViewResolver y RedirectView, la redirección siempre será contextRelative si su objetivo de redirección comienza con /. Por lo tanto, también enviar un //yahoo.com/path/to/resource no ayudaría a obtener una redirección relativa del protocolo.
Entonces, para lograr lo que está intentando, podría hacer algo como:
fuente
Otra forma de hacerlo es simplemente usar el
sendRedirect
método:fuente
Puede hacer esto de una manera bastante concisa usando
ResponseEntity
así:fuente
Para mi funciona bien:
fuente
Para la URL externa, debe utilizar " http://www.yahoo.com " como URL de redireccionamiento.
Esto se explica en la redirección: prefijo de la documentación de referencia de Spring.
redirigirá en relación con el contexto de Servlet actual, mientras que un nombre como
redirigirá a una URL absoluta
fuente
¿Probó RedirectView donde puede proporcionar el parámetro contextRelative?
fuente
/
para verificar si debería ser relativo al contexto de la aplicación web. La solicitud de redireccionamiento seguirá siendo para el mismo host.En resumen
"redirect://yahoo.com"
te lo prestaráyahoo.com
.donde como
"redirect:yahoo.com"
te prestará esyour-context/yahoo.com
decir, por ejemplolocalhost:8080/yahoo.com
fuente