Spring - POST 二进制文件 - 字符解码失败
Spring - POST with binary file - Character decoding failed
我是 运行 一个 spring-boot 应用程序,似乎在处理特定请求时遇到问题。该请求是一个包含二进制数据的 POST,但是,当 JavaServlet(或 tomcat?)接收到它时,它不知道如何对其进行解码,因此会产生以下错误:
org.apache.tomcat.util.http.Parameters : Character decoding failed. Parameter [0 *H÷
0 UUS1#0!U
S§¥ø§'ôZúöf¿(å_Ý«"õéñ¤åyl¢Ýg0izt¡÷~ÅüvDt¿Äû¨Ë åt@òÔÊdJRBq%2¶ úFsX] with value [] has been ignored. Note that the name and value quoted here may be corrupted due to the failed decoding. Use debug level logging to see the original, non-corrupted values.
我知道以下配置似乎对它有一些影响,但我不知道要为包含二进制文件的 post 设置什么值:
server.tomcat.uri-encoding=UTF-8 #I've also tried UTF-16
感谢您的宝贵时间。
编辑(答案):
您可以使用具有以下配置的 apache 代理来解决此问题:
<Location /endpoint/>
ProxyPass https://127.0.0.1:443/endpoint/
RequestHeader unset Content-Type
RequestHeader set Content-Type "application/octet-stream"
</Location>
取消设置 Content-Type 是可选的,我相信设置应该覆盖。但是,我不是 100% 该字段不区分大小写。也可以添加RequestHeader unset content-type
。
application/x-www-form-urleconded
不是适合二进制数据的内容类型。 Tomcat 认为您已向其提交了一个表单,并试图从二进制数据中解析字段的名称和值。您应该使用适合二进制数据的内容类型。 application/octet-stream
是一种选择。
我是 运行 一个 spring-boot 应用程序,似乎在处理特定请求时遇到问题。该请求是一个包含二进制数据的 POST,但是,当 JavaServlet(或 tomcat?)接收到它时,它不知道如何对其进行解码,因此会产生以下错误:
org.apache.tomcat.util.http.Parameters : Character decoding failed. Parameter [0 *H÷
0 UUS1#0!U
S§¥ø§'ôZúöf¿(å_Ý«"õéñ¤åyl¢Ýg0izt¡÷~ÅüvDt¿Äû¨Ë åt@òÔÊdJRBq%2¶ úFsX] with value [] has been ignored. Note that the name and value quoted here may be corrupted due to the failed decoding. Use debug level logging to see the original, non-corrupted values.
我知道以下配置似乎对它有一些影响,但我不知道要为包含二进制文件的 post 设置什么值:
server.tomcat.uri-encoding=UTF-8 #I've also tried UTF-16
感谢您的宝贵时间。
编辑(答案): 您可以使用具有以下配置的 apache 代理来解决此问题:
<Location /endpoint/>
ProxyPass https://127.0.0.1:443/endpoint/
RequestHeader unset Content-Type
RequestHeader set Content-Type "application/octet-stream"
</Location>
取消设置 Content-Type 是可选的,我相信设置应该覆盖。但是,我不是 100% 该字段不区分大小写。也可以添加RequestHeader unset content-type
。
application/x-www-form-urleconded
不是适合二进制数据的内容类型。 Tomcat 认为您已向其提交了一个表单,并试图从二进制数据中解析字段的名称和值。您应该使用适合二进制数据的内容类型。 application/octet-stream
是一种选择。