为什么不为每个 HTTP 请求类型公开一个 REST 服务,并根据路径中的信息对其进行路由?例如(未经测试,可能无法按原样工作,但您了解基本概念):
@Autowired
RestTemplate restTemplate;
@Value("${rest.proxy.target.base.url}")
String targetBaseUrl;
@RequestMapping(value = "/restProxy/{restUrlPath}", method = RequestMethod.GET)
public @ResponseBody String restProxyGet(@PathVariable("restUrlPath") String restUrlPath) {
return restTemplate.getForObject(targetBaseUrl+ "/" + restUrlPath, String.class);
}
@RequestMapping(value = "/restProxy/{restUrlPath}", method = RequestMethod.POST)
public @ResponseBody String restProxyPost(@PathVariable("restUrlPath") String restUrlPath, @RequestBody String body) {
return restTemplate.postForObject(targetBaseUrl + "/" + restUrlPath, body, String.class);
}
//Can also add additional methods for PUT, DELETE, etc. if desired
如果您需要与不同的主机通信,您只需添加另一个路径变量,该变量充当存储不同目标基本 URL 的映射的键。您可以从控制器添加您想要的任何身份验证,或者通过 Spring Security 中的自定义身份验证。
您的问题对细节有些轻描淡写,因此您的具体情况可能会使事情复杂化,但基本方法应该可行。