Percebi que o código a seguir está redirecionando o usuário para uma URL dentro do projeto,
@RequestMapping(method = RequestMethod.POST)
public String processForm(HttpServletRequest request, LoginForm loginForm,
BindingResult result, ModelMap model)
{
String redirectUrl = "yahoo.com";
return "redirect:" + redirectUrl;
}
enquanto o seguinte está redirecionando corretamente como pretendido, mas requer 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;
}
Quero que o redirecionamento sempre redirecione para a URL especificada, quer tenha um protocolo válido ou não, e não quero redirecionar para uma exibição. Como eu posso fazer isso?
Obrigado,
java
spring
jsp
spring-mvc
Jake
fonte
fonte
@ResponseStatus(HttpStatus.FOUND)
Você pode usar o
RedirectView
. Copiado do JavaDoc :Exemplo:
Você também pode usar um
ResponseEntity
, por exemploE, claro, volte
redirect:http://www.yahoo.com
conforme mencionado por outros.fonte
Olhando para a implementação real de UrlBasedViewResolver e RedirectView, o redirecionamento sempre será contextRelative se seu destino de redirecionamento começar com /. Portanto, o envio de //yahoo.com/path/to/resource não ajudaria a obter um redirecionamento relativo de protocolo.
Então, para alcançar o que você está tentando, você pode fazer algo como:
fonte
Outra maneira de fazer isso é usar o
sendRedirect
método:fonte
Você pode fazer isso de forma bastante concisa usando
ResponseEntity
assim:fonte
Para mim funciona bem:
fonte
Para url externo, você deve usar " http://www.yahoo.com " como o url de redirecionamento.
Isso é explicado no redirect: prefixo da documentação de referência do Spring.
irá redirecionar em relação ao contexto do Servlet atual, enquanto um nome como
irá redirecionar para um URL absoluto
fonte
Você tentou RedirectView, onde pode fornecer o parâmetro contextRelative?
fonte
/
para verificar se ele deve ser relativo ao contexto do webapp. A solicitação de redirecionamento ainda será para o mesmo host.Em suma,
"redirect://yahoo.com"
vou emprestar para vocêyahoo.com
.onde
"redirect:yahoo.com"
vai lhe emprestar,your-context/yahoo.com
ou seja, para ex-localhost:8080/yahoo.com
fonte