java - 多部分/表单数据之间的空白问题;& 内容类型标题中的边界
问题描述
我开发了 Spring boot(v1.5.2) rest api 并使用 spring-boot-starter-undertow 嵌入式服务器来运行应用程序。其中一项操作具有上传文件功能(方法 = RequestMethod.POST,消耗 = MediaType.MULTIPART_FORM_DATA_VALUE)。
当使用带有自动生成的标头(如 Content-Type、Content-Length 等)的邮递员进行测试时,该应用程序可以正常工作。
但问题是,客户端/消费者应用程序将 Content-Type 发送为 multipart/form-dat a;b oundary=----xyz---- (在 multipart/form-data; & 边界之间没有空格)和请求因 400 Bad request 而失败,并且没有到达控制器。
但是自动生成的邮递员标题有空格。(multipart/form-dat a; b oundary=----xyz---) 工作正常,当我们覆盖此标头以具有该空格时,它也无法在邮递员中工作。所以问题在于 Content-Type 的模式。
我尝试过的几件事是,我添加了过滤器并覆盖了 HttpServletRequestWrapper 以在请求到达控制器之前修改内容类型标头,但解决方案不起作用。我也尝试过 AOP,但没有 setHeader 方法来设置/更新请求标头。
您能否分享您在不接触消费者应用程序的情况下如何在服务器应用程序(生产者)中处理这种情况的经验或想法。
解决方案
我仍然无法弄清楚 undertow 的问题/根本原因,但是当我将嵌入式服务器更改为 spring-boot-starter-jetty 时,我的请求在 multipart/form-data 之间有/没有空格;& 内容类型的边界工作正常。
推荐阅读
- jenkins - 在 GCP cloudbuild.yaml 中添加“你确定……”对话框
- kotlin - 扩展函数的主变量约定
- java - 在 Hadoop 3.1.4 上运行 TestDFSIO 时出现 NoClassDefFoundException
- flutter - Flutter - 在 Android 上访问隐藏方法 Lsun/misc/Unsafe 错误
- c# - 如何使运动独立于物体的旋转?C# 统一
- java - 如何防止随机数重叠
- reactjs - 在选择为基于API调用时,设置SELECT的默认值
- java - Selenium - TestNG - 如何根据 Maven 命令行在并行使用中传递的参数跳过/禁用一些测试
- r - 使用 if-else [R] 添加具有条件值的新列
- odoo-13 - 将任何移动应用程序连接到 odoo 后端应用程序