Перенаправление на стороне сервера для вызова REST - PullRequest
0 голосов
/ 24 сентября 2018

Какой лучший способ сделать перенаправление на стороне сервера для вызова REST?

Рассмотрим следующий сценарий:

@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()
    }

}

Я знаю спецификации HTTPутверждаю, что 3XX коды состояния ответа должны использоваться для перенаправления, но, насколько я понимаю, это делается на стороне клиента (клиент вызывает вызывающий URI, указанный в заголовке ответа 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();
    }

}

Примечание: Это , а не приложение Spring MVC (поэтому яневозможно перенаправить через return new ModelAndView("redirect:/redirectUrl", model) или RedirectView)

Спасибо за помощь!

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Для справки: Перенаправление на внешний URL-адрес из действия контроллера в Spring MVC

 @RequestMapping(value = "/redirect", method = RequestMethod.GET)
    public void method(HttpServletResponse httpServletResponse) {
        httpServletResponse.setHeader("Location", projectUrl);
        httpServletResponse.setStatus(302);
    }
0 голосов
/ 06 октября 2018

Если кто-то знает о хорошем методе достижения этого, пожалуйста, оставьте ответ, и я его приму.

Нет встроенной поддержки перенаправления на стороне сервера REST.

Для приложения Spring MVC вы можете использовать ModelAndView("redirect:/redirectUrl", model) или RedirectView.

Для REST у вас есть два варианта.

  1. Используйте коды состояния 3XX и заголовок Location.Это приведет к тому, что клиент REST выполнит перенаправление, вызвав URL-адрес из заголовка Location.
  2. Используйте RestTemplate (или другой HTTP-клиент) на своем сервере и вручную вызовите URL-адрес, который вы хотите перенаправить.к.
0 голосов
/ 24 сентября 2018

Похоже на недостаток дизайна .Я извлек бы то, что является общим между двумя @Controller с, в @Service, а затем вызвал @Service из @Controller с.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...