WSO2 API 经理调解能否打破我们的多部分请求?

Could WSO2 API Manager mediation break our multipart requests?

我们目前正在使用 WSO2 Api 管理器 (1.9.0) 访问新开发的 API 但这会产生一些奇怪的 Spring 引导异常。该请求包含文件上传并作为 multipart/form-data 请求发送。不过,WSO2 方面应用调解来设置一些自定义 HTTP headers。

org.springframework.web.multipart.MultipartException: Current request is not a multipart request
        at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:188) ~[spring-web-4.3.2.RELEASE.jar!/:4.3.2.RELEASE]
        at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:104) ~[spring-web-4.3.2.RELEASE.jar!/:4.3.2.RELEASE]
        at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-4.3.2.RELEASE.jar!/:4.3.2.RELEASE]
        at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:161) ~[spring-web-4.3.2.RELEASE.jar!/:4.3.2.RELEASE]
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:128) ~[spring-web-4.3.2.RELEASE.jar!/:4.3.2.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114) ~[spring-webmvc-4.3.2.RELEASE.jar!/:4.3.2.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) ~[spring-webmvc-4.3.2.RELEASE.jar!/:4.3.2.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) ~[spring-webmvc-4.3.2.RELEASE.jar!/:4.3.2.RELEASE]

有没有办法在不搞乱我们的多部分请求的情况下使用中介?

似乎 WSO2 的 API 管理器的默认行为不是在调解期间保留请求的 Content-Type 和 Content-Length header。但是,您可以通过编辑 passthru-http.properties 文件告诉它保持那些 HTTP header 的完整性。您可以在 repository/conf 目录中的 WSO2 AM 安装文件夹中找到它。

只需添加这一行:

http.headers.preserve=Content-Length,Content-Type

答案实际上是基于this post