Я задал какой-то похожий вопрос некоторое время назад.Пожалуйста, см. Переадресация на стороне сервера для вызова REST для получения дополнительной информации.
Лучший способ (насколько я понимаю), которого вы могли бы достичь, это вручную вызвать нужные конечные точки из вашей начальной конечной точки.
@RestController
public class RouteController {
@Value("${firstUrl}")
private String firstUrl;
@Value("${secondUrl}")
private String secondUrl;
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value = "/**")
public void route(HttpServletRequest request) {
String body = IOUtils.toString(request.getReader());
if(isFirstServer(body)) {
restTemplate.exchange(firstUrl,
getHttpMethod(request),
getHttpEntity(request),
getResponseClass(request),
getParams(params));
} else {
restTemplate.exchange(secondUrl,
getHttpMethod(request),
getHttpEntity(request),
getResponseClass(request),
getParams(params))
}
}
}
Пример реализации для getHttpMethod
:
public HttpMethod getHttpMethod(HttpServletRequest request) {
return HttpMethod.valueOf(request.getMethod());
}
Аналогичные реализации для getHttpEntity
, getResponseClass
и getParams
.Они используются для преобразования данных из HttpServletRequest request
в типы, требуемые методом exchange
.
Кажется, есть много лучших способов сделать это для приложения Spring MVC, но я думаю, что это не относится к вашему контексту.
Другим способом, которым вы могли бы достичь этого, было быопределить свой собственный клиент REST и добавить туда логику маршрутизации.