我在解决一个需求,我用的是springboot框架,现在有一个接口传入参数url,这个url是一个网络文件地址,接口收到请求后,用自己的网络请求网络文件,真实的返回给客户端,php的readfile函数可以解决这个问题,但是java语言中有这样的解决方案吗?我需要的是真实的返回客户端,而不是全部阅读后返回客户端
@Controller
@Api(tags = "test")
@RequestMapping("/test")
@CrossOrigin
public class TestController {
@RequestMapping(value = "/get", method = RequestMethod.POST)
@ApiOperation(value = "get")
public ResponseEntity<FileSystemResource> test() throws IOException {
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"123\": 1}");
Request request = new Request.Builder()
.url("https://github.com/xujimu/ios_super_sign/archive/refs/heads/master.zip")
.method("GET", body)
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
}
}
2条答案
按热度按时间flseospp1#
您可以使用
ResponseEntity<StreamingResponseBody>
来实现此目的。您已经选择了要返回的内容类型。我们最终返回了
produces = MediaType.APPLICATION_NDJSON_VALUE
。我们不得不修改处理rest请求的方式,从
RestClient to
WebClient ':当我们终于让这个工作的时候,它真的很好用:)
您可以在https://www.baeldung.com/spring-mvc-sse-streams上看到其他一些示例。
5q4ezhmt2#
我用java的URL类解决了这个问题