取决于请求正文的内容,我需要将http请求重定向到URL_1
或URL_2
。
我开始执行控制器:
@RestController
public class RouteController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value = "/**")
public HttpServletResponse route(HttpServletRequest request) {
String body = IOUtils.toString(request.getReader());
if(isFirstServer(body)) {
//send request to URL_1 and get response
} else {
//send request to URL_2 and get response
}
}
}
请求可能是GET
或POST
或PUT
等的PATCH
您能帮我写那个代码吗?
答案 0 :(得分:0)
我前段时间曾问过一个类似的问题。请访问Server side redirect for REST call了解更多背景信息。
(以我目前的理解),最好的方法是从初始端点手动调用所需的端点。
@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客户端并在其中添加路由逻辑。