次のコードでは、ユーザーをプロジェクト内のURLにリダイレクトしています。
@RequestMapping(method = RequestMethod.POST)
public String processForm(HttpServletRequest request, LoginForm loginForm,
BindingResult result, ModelMap model)
{
String redirectUrl = "yahoo.com";
return "redirect:" + redirectUrl;
}
一方、以下は意図したとおりに正しくリダイレクトされていますが、http://または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;
}
有効なプロトコルが含まれているかどうかにかかわらず、リダイレクトを常に指定されたURLにリダイレクトし、ビューにリダイレクトしたくない場合に使用します。どうやってやるの?
ありがとう、
それには2つの方法があります。
最初:
@RequestMapping(value = "/redirect", method = RequestMethod.GET)
public void method(HttpServletResponse httpServletResponse) {
httpServletResponse.setHeader("Location", projectUrl);
httpServletResponse.setStatus(302);
}
第二:
@RequestMapping(value = "/redirect", method = RequestMethod.GET)
public ModelAndView method() {
return new ModelAndView("redirect:" + projectUrl);
}
RedirectView
を使用できます。 JavaDoc からコピーしたもの
絶対URL、コンテキスト相対URL、または現在のリクエスト相対URLにリダイレクトするビュー
例:
@RequestMapping("/to-be-redirected")
public RedirectView localRedirect() {
RedirectView redirectView = new RedirectView();
redirectView.setUrl("http://www.yahoo.com");
return redirectView;
}
ResponseEntity
を使うこともできます。
@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);
}
そしてもちろん、他の人が言ったようにredirect:http://www.yahoo.com
を返してください。
rlBasedViewResolver および RedirectView の実際の実装を調べると、リダイレクト先が/で始まる場合、リダイレクトは常にcontextRelativeになります。そのため、//yahoo.com/path/to/resourceを送信しても、プロトコルの相対リダイレクトを取得するのに役立ちません。
だからあなたがしようとしていることを達成するためには、次のようにすることができます。
@RequestMapping(method = RequestMethod.POST)
public String processForm(HttpServletRequest request, LoginForm loginForm,
BindingResult result, ModelMap model)
{
String redirectUrl = request.getScheme() + "://www.yahoo.com";
return "redirect:" + redirectUrl;
}
それを行う別の方法は、sendRedirect
メソッドを使用することです。
@RequestMapping(
value = "/",
method = RequestMethod.GET)
public void redirectToTwitter(HttpServletResponse httpServletResponse) throws IOException {
httpServletResponse.sendRedirect("https://Twitter.com");
}
外部URLの場合、リダイレクトURLとして " http://www.yahoo.com "を使用する必要があります。
これはSpringリファレンスドキュメントの redirect:prefix で説明されています。
リダイレクト:/ myapp/some/resource
現在のサーブレットコンテキストを基準にしてリダイレクトします。
絶対URLにリダイレクトします
私にとってはうまくいきます:
@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);
}
あなたは試してみました RedirectView あなたはcontextRelativeパラメータを提供することができますか?
このようにResponseEntity
を使用すると、かなり簡潔な方法でこれを行うことができます。
@GetMapping
ResponseEntity<Void> redirect() {
return ResponseEntity.status(HttpStatus.FOUND)
.location(URI.create("http://www.yahoo.com"))
.build();
}