【发布时间】:2020-01-08 03:49:23
【问题描述】:
我需要实现一个 REST-Endpoint,它接收 multipart/form-data
我使用:
- 弹簧靴
- 科特林
- 弹簧 MVC
包含以下部分的多部分表单提交:
部署名称 ----- text/plain
启用重复过滤 ----- 文本/纯文本
仅部署更改 ----- 文本/纯文本
部署源 ----- 文本/纯文本
租户 ID ----- 文本/纯文本
* ----- 应用程序/八位字节流
Rest Controller 看起来是这样的:
@PostMapping("/data/deployment/create")
fun uploadDmn(
@RequestParam("deployment-name")
deploymentName: String,
@RequestParam("enable-duplicate-filtering")
enableDuplicateFiltering: String?,
@RequestParam("deploy-changed-only")
deployChangedOnly: String,
@RequestParam("deployment-source")
deploymentSource: String,
@RequestParam("tenant-id")
tenantId: String,
@RequestParam("data")
data: MultipartFile
) {
println(deploymentName)
println(deployChangedOnly)
println(deploymentSource)
println(tenantId)
println(data.toString())
}
对于所有有效的参数,但对于最后一个无效的参数。 我试图给一个不起作用的名称“数据”、“*”、“文件”。
所需的请求部分“数据”不存在
控制器看不到该文件。
我也尝试过使用 Retrofit:
@PostMapping("/data/deployment/create")
@Multipart
fun uploadDmn(
@Part("data")
data: MultipartFile
) {
println(data.toString())
}
但这也行不通:
指定为非空的参数为空
如何使用该内容类型?多部分/表单数据
请求示例:
--28319d96a8c54b529aa9159ad75edef9
Content-Disposition: form-data; name="deployment-name"
aName
--28319d96a8c54b529aa9159ad75edef9
Content-Disposition: form-data; name="enable-duplicate-filtering"
true
--28319d96a8c54b529aa9159ad75edef9
Content-Disposition: form-data; name="deployment-source"
process application
--28319d96a8c54b529aa9159ad75edef9
Content-Disposition: form-data; name="data"; filename="test.bpmn"
<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions ...>
<!-- BPMN 2.0 XML omitted -->
</bpmn2:definitions>
--28319d96a8c54b529aa9159ad75edef9--
有人可以帮忙吗?
【问题讨论】:
-
您是否将
spring.servlet.multipart.enabled设置为true? -
@LHCHIN 不,但我尝试在 application.properties 中这样做。还是同样的问题:
Parameter specified as non-null is null -
您应该在 crsf 之前添加多部分过滤器。 stackoverflow.com/a/35405063/11951081
标签: java spring-boot spring-mvc kotlin multipartform-data