【发布时间】:2022-02-04 23:09:08
【问题描述】:
我有这个代码:
@PostMapping("foobar")
public ResponseEntity<SaveLogsResult> foobar(@RequestPart("file") MultipartFile log, @RequestPart("env") MultipartFile json){
return ResponseEntity.ok(fooService.saveFooBar(log, json, UUID.randomUUID().toString()));
}
两个应用程序向此端点发送正式正确的数据,一个严重失败并收到 http 状态 400。
我设置了logging.level.org.springframework.web=DEBUG 并且可以看到(除其他外):
Required request part 'env' is not present
Resolved [org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part 'env' is not present]
Completed 400 BAD_REQUEST
为了进一步诊断这个问题,我比较了一个工作(左)和一个非工作(右)请求。唯一不同的是失踪的filename:
据我了解,RFC for Content-Disposition 省略 filename 是完全有效的:
后跟一个包含文件原始名称的字符串 传送。 文件名始终是可选的,不得使用 应用程序盲目:路径信息应该被剥离,并且 应完成向服务器文件系统规则的转换。这个 参数主要提供指示性信息。当用于 与 Content-Disposition: attachment 结合,用作 最终呈现给“另存为”对话框的默认文件名 用户。
这是 Spring 内部的错误吗?我使用 Spring Boot 2.6.2 不幸的是,我无法更改非工作组件以进行快速测试,因为它是购买的组件,不会经常收到错误修复。 我认为我的问题与here 描述的问题不同,因为故障只发生在特定场景中。
【问题讨论】:
标签: spring spring-boot http http-headers