我需要实现一个REST端点,该端点可以接收multipart / form-data
我使用:
包含以下部分的多部分表单提交:
部署名称-----文本/纯文本
启用重复过滤-----文本/纯文本
仅部署更改的-----文本/纯文本
部署源-----文本/纯文本
租户ID -----文本/纯文本
* ----- application / octet-stream
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())
}
但这也不起作用:
指定为非null的参数为null
如何处理该内容类型? multipart / form-data
请求示例:
--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--
有人可以帮忙吗?
答案 0 :(得分:0)
希望我能帮助您。试试吧。
@RequestMapping(value = "/putRequest",
produces = { "application/json" },
consumes = { "multipart/form-data" },
method = RequestMethod.PUT)
public ResponseEntity<SuccessDto> requestPut(@Valid @RequestParam(value = "commit", required = false, defaultValue="false") Boolean commit, @Valid @RequestPart("file") MultipartFile file) {
return new ResponseEntity<>(HttpStatus.OK);
}
答案 1 :(得分:0)
我猜你可以使用类似的东西
@RequestMapping(value = "/source/upload/{sourceName}", method = RequestMethod.POST)
public List<String> uploadSource(@RequestParam("file") MultipartFile sourceFile,
@PathVariable("sourceName") String sourceName) throws IOException {
File outputFile = new File(System.getProperty("java.io.tmpdir"), sourceFile.getOriginalFilename());
sourceFile.transferTo(outputFile);
<<your business logic>>
Files.deleteIfExists(outputFile.toPath());
return Arrays.asList(columns);
}
请注意,我已经在temp目录中创建了该文件的副本(通过代码),并在其中使用该文件来实现我的业务逻辑