代码之家  ›  专栏  ›  技术社区  ›  user10367961

REST调用的服务器端重定向

  •  0
  • user10367961  · 技术社区  · 7 年前

    服务器端 重新定向呼叫休息?

    考虑以下场景:

    @RestController
    @RequestMapping("/first")
    public class FirstController {
    
        @GetMapping
        public String duStuff(){
            //Redirect to SecondController's doStuff()
        }
    
    }
    
    @RestController
    @RequestMapping("/second")
    public class SecondController {
    
        @GetMapping
        public String doStuff(){
            //Redirect here from FirstController's do stuff()
        }
    
    }
    

    3XX响应状态代码 应该用于重定向,但据我所知,这是在客户端完成的(由客户端调用 Location 响应标头)。

    我实现这个的唯一方法就是使用 RestTemplate 从中的端点执行请求 FirstController 到中的终结点 SecondController . 这是可行的,但我很好奇是否有更好的方法来实现这一点。

    @RestController
    @RequestMapping("/first")
    public class FirstController {
    
        @Autowired
        private RestTemplate template;
    
        @GetMapping
        public String duStuff(){
            /** Is there a better way of doing this, considering I don't want 
                to get the client involved in the redirect to `second`? */
            return template.getForEntity("second", String.class).getBody();
        }
    
    }
    

    这是 一个springmvc应用程序(所以我不能通过 return new ModelAndView("redirect:/redirectUrl", model) RedirectView

    谢谢你的帮助!

    3 回复  |  直到 7 年前
        1
  •  0
  •   cassiomolin    7 年前

    听起来像是 设计缺陷 @Controller 他变成了一个 @Service 然后调用 @控制器 s。

        2
  •  0
  •   Nutan    7 年前

    Redirect to an external URL from controller action in Spring MVC

     @RequestMapping(value = "/redirect", method = RequestMethod.GET)
        public void method(HttpServletResponse httpServletResponse) {
            httpServletResponse.setHeader("Location", projectUrl);
            httpServletResponse.setStatus(302);
        }
    
        3
  •  0
  •   user10367961 user10367961    7 年前

    如果有人知道一个很好的方法来实现这一点,请留下一个答案,我会接受它。

    REST服务器端重定向没有现成的支持。

    为了一个 春季MVC 应用程序,您可以使用 ModelAndView("redirect:/redirectUrl", model) RedirectView

    剩下的,你有两个选择。

    1. 依靠 3XX 状态代码和 Location 标题。这将导致REST客户机通过从 位置 标题。
    2. RestTemplate (或另一个HTTP客户端)并手动调用要重定向到的URL。