我正在尝试使用 OpenApi 支持实现一个简单的 Spring FileUpload。我正在使用 spring-boot:2.5.8 和 openapi-generator-maven-plugin:5.3.1
这是我的 OAS:
/api/datas/{id}:
post:
operationId: uploadFile
tags:
- file
parameters:
- in: path
name: id
required: true
schema:
type: integer
requestBody:
content:
multipart/form-data:
schema:
type: object
required:
- file
- docName
properties:
file:
type: string
format: binary
docName:
type: string
docGroup:
type: integer
OpenApi 生成器创建了这样一个方法。
@RequestMapping(
method = RequestMethod.POST,
value = "/api/datas/{id}",
consumes = { "multipart/form-data" }
)
default ResponseEntity<Void> uploadFile(
@ApiParam(value = "", required = true) @PathVariable("id") Integer id,
@ApiParam(value = "") @Valid @RequestPart(value = "file", required = true) MultipartFile file,
@ApiParam(value = "", required = true) @Valid @RequestPart(value = "docName", required = true) String docName,
@ApiParam(value = "") @Valid @RequestPart(value = "docGroup", required = false) Integer docGroup) {
return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
}
问题是 Spring 没有针对 Integer、Enum 或 Date 等类型的 HttpMessageConverter,我希望能够将其定义为 requestBody,因此 Spring 会抛出“不支持的媒体类型”异常。
我真的需要为简单类型实现一堆 MessageConverters,还是有更好的解决方案?我试图强制 spring-openapi-generator 为简单的属性创建 @RequestParam,但不知道如何。
最后,我希望能够发布一个包含文件的简单表单,我需要为此使用 OpenApi。