我正在使用Spring Integration来接收HTTP请求,该请求具有嵌套在多部分请求中的多部分内容,如下所示。当使用 CommonsMultipartResolver 作为解析器时,传递给接收服务激活器的 LinkedMultiValueMap 包含所有部分的映射,但嵌入的multipart是 UploadedMultipartFile 包含整个内容。在示例中 boundary2 ---- extKDvsqGExTQI2WVuplHFCUQJ3XVL 是嵌入式多部分的边界。
如何将嵌入的multipart解析为 LinkedMultiValueMap ,以便获取版本和有效负载? CommonsMultipartResolver 是否可以执行此操作,还是有其他方法可以解析它?
Http请求:
POST http://xxxxx:8087/edi846Inbound HTTP / 1.1
Content-Type:multipart / form-data; boundary = DM1-Sb0636VXPQNO3412Ygegb9suqr .......
内容长度:2787
- DM1-Sb0636VXPQNO3412Ygegb9suqr
内容 - 处置:表单数据;命名="从"
Content-Type:text / plain; charset = ISO-8859-1 Content-Length:7
gisb应答收据
- DM1-Sb0636VXPQNO3412Ygegb9suqr
内容 - 处置:表单数据;命名="输入格式"内容类型: text / plain; charset = ISO-8859-1 Content-Length:3
X12
- DM1-Sb0636VXPQNO3412Ygegb9suqr
内容 - 处置:表单数据;名称="输入数据&#34 ;;文件名=" TEST-DTEBS_846_3563_10142015102600.x12"
内容类型: multipart / encrypted; boundary = boundary2 - extKDvsqGExTQI2WVuplHFCUQJ3XVL协议: 应用/ PGP加密
boundary2 ---- extKDvsqGExTQI2WVuplHFCUQJ3XVL
内容 - 处置:表单数据;命名="版本"内容类型: application / pgp-encrypted Content-Length:10
版本:1
boundary2 ---- extKDvsqGExTQI2WVuplHFCUQJ3XVL
内容 - 处置:表单数据;命名="有效载荷" Content-Type:application / octet-stream Content-Length: 1118
----- BEGIN PGP MESSAGE -----版本:BCPG v1.47
hQIOA8aa0 / bci2e / EAF / fkgOBK + cOoeY + 44htcvjE9Sxk9RK73aOEaxDOBNqFOsV Nzw1va7cc7wzYOTlHhZV / MkpXq + IrZV316moJu1EAhscN9YmyReVDOzrkzZ1hBmq V2MlAr5 / CRqS7nQEmCqy / Mz0STtAPZNg3FOh8F79dJnRws5 / SDW + zvn2MoSvGTs3 0YvjmtPq2YyVkMlAvJ62f903UYNIiAcEe1k8gWDVW9LJ4tGud + 8H0bsG8EFWPsSI b5rON + MKGykbWGnbSrOy9cqslJaghj91r7ZbsXXXiRn9v4rpOardfiBEnoamI5Tz jfDKESnr7CqoZgb62je + NJrB5puoAwy8LTynXx4cmQgAnf8lb6f + mIxa1U1Mu6iR KNTjrH83Cx2BjTra8E8hu0O7GvuczGfA9NiONmxbglgKK58 / QVYdlsZUiGTaWkkY 4nMHiaFe9TiPQ6W2vMGutLFR3V6YSshchCskl6cP1OdaIXCYgzZKIjUWHePzd / DS zCZeNqul1N7iIQ0L5lfSGgfB2eDeeK3JKFjetrrbJQXz0 + XeTZLPMSMr6W5Ggq3l PnoJVTrxUd3b2WKgR4FZB + imYRWEz5KLnB5ZVedC + fU24bECcNptrTQaZZUWnR3Z ABJqz8avBrNV0Jf9BaFRxcWkrWyr4KtxDArxXOuMHNvGVtj + hhPZcPGj3N9Xam3E 6snAGebIiAEivZPYLVVVk0lZW2H0ISwkKkjD8qs7h8wa7Qbchp2K5IyENEzi20oe FNRoCwHyjsCY0nECHCG3WON0EXG2DZDTvA17OoyfuKnRT09FVt3OOEPTV048vUid kUoGa7uT7ud9En7uNSfmDpw + xHxB38N986BKBtoeJlGgDYISJkIgr40TIKMLE / YC whDnmKxT68dfSGcv / DIUzYs + d / OBzSpHIWK87me5QnhmLTQ1xwfwtFoTyk6B3Vzx ljlZFD6e7PJfjo / RIhb0zMvtBvRTONRrMXKRdRY = = SERM -----结束PGP消息-----
boundary2 ---- extKDvsqGExTQI2WVuplHFCUQJ3XVL -
- DM1-Sb0636VXPQNO3412Ygegb9suqr -
来自地图的嵌入式内容:
boundary2 ---- extKDvsqGExTQI2WVuplHFCUQJ3XVL
内容 - 处置:表单数据;命名="版本"内容类型:application / pgp-encrypted Content-Length: 10
版本:1
boundary2 ---- extKDvsqGExTQI2WVuplHFCUQJ3XVL
内容 - 处置:表单数据;命名="有效载荷" Content-Type:application / octet-stream Content-Length: 1118
----- BEGIN PGP MESSAGE -----版本:BCPG v1.47
hQIOA8aa0 / bci2e / EAF / fkgOBK + cOoeY + 44htcvjE9Sxk9RK73aOEaxDOBNqFOsV Nzw1va7cc7wzYOTlHhZV / MkpXq + IrZV316moJu1EAhscN9YmyReVDOzrkzZ1hBmq V2MlAr5 / CRqS7nQEmCqy / Mz0STtAPZNg3FOh8F79dJnRws5 / SDW + zvn2MoSvGTs3 0YvjmtPq2YyVkMlAvJ62f903UYNIiAcEe1k8gWDVW9LJ4tGud + 8H0bsG8EFWPsSI b5rON + MKGykbWGnbSrOy9cqslJaghj91r7ZbsXXXiRn9v4rpOardfiBEnoamI5Tz jfDKESnr7CqoZgb62je + NJrB5puoAwy8LTynXx4cmQgAnf8lb6f + mIxa1U1Mu6iR KNTjrH83Cx2BjTra8E8hu0O7GvuczGfA9NiONmxbglgKK58 / QVYdlsZUiGTaWkkY 4nMHiaFe9TiPQ6W2vMGutLFR3V6YSshchCskl6cP1OdaIXCYgzZKIjUWHePzd / DS zCZeNqul1N7iIQ0L5lfSGgfB2eDeeK3JKFjetrrbJQXz0 + XeTZLPMSMr6W5Ggq3l PnoJVTrxUd3b2WKgR4FZB + imYRWEz5KLnB5ZVedC + fU24bECcNptrTQaZZUWnR3Z ABJqz8avBrNV0Jf9BaFRxcWkrWyr4KtxDArxXOuMHNvGVtj + hhPZcPGj3N9Xam3E 6snAGebIiAEivZPYLVVVk0lZW2H0ISwkKkjD8qs7h8wa7Qbchp2K5IyENEzi20oe FNRoCwHyjsCY0nECHCG3WON0EXG2DZDTvA17OoyfuKnRT09FVt3OOEPTV048vUid kUoGa7uT7ud9En7uNSfmDpw + xHxB38N986BKBtoeJlGgDYISJkIgr40TIKMLE / YC whDnmKxT68dfSGcv / DIUzYs + d / OBzSpHIWK87me5QnhmLTQ1xwfwtFoTyk6B3Vzx ljlZFD6e7PJfjo / RIhb0zMvtBvRTONRrMXKRdRY = = SERM
-----结束PGP消息-----
boundary2 ---- extKDvsqGExTQI2WVuplHFCUQJ3XVL -
答案 0 :(得分:0)
不确定您的意思,但我建议您调查MultipartAwareFormHttpMessageConverter.readMultipart()
中的代码。这是UploadedMultipartFile
出现的地方。
答案 1 :(得分:0)
快速查看CommonsMultipartResolver
似乎表明它不支持嵌套的多部分。
将其子类化并覆盖parseRequest()
可能并不太难,但您可能也需要深入研究commons-fileupload
。
修改强>
关于多部分回复:
我只是patched the http sample并且发现,只要请求具有正确的accept
标头,只需返回MultiValueMap
“就行了”。
如果您需要更多地控制部件标头,则需要对AllEncompassingFormHttpMessageConverter
进行子类化并覆盖getHttpEntity()
以插入额外的标头并配置网关以使用自定义适配器。但是基本标题工作正常 - 这......
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
map.add("foo", "Hello");
map.add("bar", "baz");
map.add("fiz", "qux".getBytes());
return map;
......导致这个......
--6_zk8PXoaiUO_By2XJuUpjs5CEEnYM-wj0qE
Content-Disposition: form-data; name="foo"
Content-Type: text/plain;charset=ISO-8859-1
Content-Length: 5
Hello
--6_zk8PXoaiUO_By2XJuUpjs5CEEnYM-wj0qE
Content-Disposition: form-data; name="bar"
Content-Type: text/plain;charset=ISO-8859-1
Content-Length: 3
baz
--6_zk8PXoaiUO_By2XJuUpjs5CEEnYM-wj0qE
Content-Disposition: form-data; name="fiz"
Content-Type: application/octet-stream
Content-Length: 3
qux
--6_zk8PXoaiUO_By2XJuUpjs5CEEnYM-wj0qE--