Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RestController-将POST请求转发到外部URL_Java_Spring_Spring Boot_Spring Restcontroller - Fatal编程技术网

Java RestController-将POST请求转发到外部URL

Java RestController-将POST请求转发到外部URL,java,spring,spring-boot,spring-restcontroller,Java,Spring,Spring Boot,Spring Restcontroller,我正在寻找一种方法,如何将已发出的POST请求转发到@RestController类中的端点,并将其转发到未触及正文和标题的外部URL(当然还返回来自此API的响应),是否可以使用一些spring特性来实现?我找到的唯一解决方案是从@RequestBody提取一个主体,从HttpServletRequest提取头,并使用restemplate执行请求。有没有更简单的方法 @RequestMapping(“/**”) public ResponseEntity mirrorRest(@Reques

我正在寻找一种方法,如何将已发出的POST请求转发到
@RestController
类中的端点,并将其转发到未触及正文和标题的外部URL(当然还返回来自此API的响应),是否可以使用一些spring特性来实现?我找到的唯一解决方案是从
@RequestBody
提取一个主体,从
HttpServletRequest
提取头,并使用
restemplate
执行请求。有没有更简单的方法

@RequestMapping(“/**”)
public ResponseEntity mirrorRest(@RequestBody(required=false)字符串体,
HttpMethod方法、HttpServletRequest请求、HttpServletResponse响应)
抛出URISyntaxException{
String requestUrl=request.getRequestURI();
URI=新URI(“http”,null,服务器,端口,null,null,null);
uri=UriComponentsBuilder.fromUri(uri)
.path(请求URL)
.query(request.getQueryString())
.build(true.toUri();
HttpHeaders=新的HttpHeaders();
枚举headerNames=request.getHeaderNames();
while(headerNames.hasMoreElements()){
字符串headerName=headerName.nextElement();
headers.set(headerName,request.getHeader(headerName));
}
HttpEntity HttpEntity=新的HttpEntity(主体、标题);
RestTemplate RestTemplate=新RestTemplate();
试一试{
返回restemplate.exchange(uri、方法、httpEntity、String.class);
}捕获(HttpStatusCodeException){
返回ResponseEntity.status(例如getRawStatusCode())
.headers(例如getResponseHeaders())
.body(例如getResponseBodyAsString());
}
}

上面的代码取自此。

这更多的是HTTP规范的问题,而不是Spring,在Spring中,服务器将返回重定向状态,指示客户端应使用相同的方法和post数据遵循重定向

这在野外通常是可以避免的,因为如果您与W3.org规范保持一致,那么在新位置重新执行请求之前应该提示客户端,这可能会导致误用和摩擦

一种替代方法是让Spring端点充当代理,对目标位置进行POST调用,而不是发出任何形式的重定向

307临时重定向(由于HTTP/1.1),在这种情况下,请求应使用另一个URI重复,但未来的请求仍可以使用原始URI。2与303不同,重新发出原始请求时不应更改请求方法。例如,必须使用另一个POST请求重复POST请求


你的意思是?这个问题与MVC控制器有关,我的是RestController,但无论如何我会检查它。