Spring Boot RestController - PostMapping - 将请求正文作为 InputStream [重复]

Posted

技术标签:

【中文标题】Spring Boot RestController - PostMapping - 将请求正文作为 InputStream [重复]【英文标题】:Spring Boot RestController - PostMapping - Process Request Body as InputStream [duplicate] 【发布时间】:2020-05-05 02:05:57 【问题描述】:

在 Spring Boot RestController 中使用 PostMapping 时,是否有一种简单的方法可以将 POST HTTP 请求的主体处理为 InputStream?

接受来自 Multipart HTTP POST 请求的文件上传作为 MultipartFile 实例非常简单,但我希望能够简单地将二进制内容发布到 HTTP 端点并将其作为 InputStream 处理。

Spring Boot 可以做到这一点吗?

例如使用以下 Postman POST:

【问题讨论】:

【参考方案1】:

我知道两种可能的方法

获取 HttpEntity

@PostMapping
public ResponseEntity<String> post(HttpEntity<byte[]> requestEntity) 
    return ResponseEntity.ok(new String(requestEntity.getBody()));

接受整个请求

@PostMapping
public ResponseEntity<String> post(HttpServletRequest request) 
    request.getInputStream();

【讨论】:

【参考方案2】:

如果您的方法中只有一个 InputStream 参数,那么您将获得请求正文。

@RequestMapping(method = RequestMethod.PUT)
public ResponseEntity<Void> put(InputStream is) 
    // Do something
    return ResponseEntity.ok();

这是 Spring Boot 2.4.1。

【讨论】:

以上是关于Spring Boot RestController - PostMapping - 将请求正文作为 InputStream [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Spring-Boot:同时处理多个请求

spring Restcontroller 或 RepositoryRestResource 用啥

Spring:RestController 和 Controller 的不同异常处理程序

Spring Boot 学习例子

Spring Boot 2Spring Boot CLI

为啥 Spring Boot 应用程序 pom 同时需要 spring-boot-starter-parent 和 spring-boot-starter-web?