【发布时间】:2022-01-20 08:13:23
【问题描述】:
我有一个包含其他 DTO 和多部分文件列表的 DTO。我正在尝试处理该 DTO,但我似乎无法读取请求。
class TeacherDTO {
private SpecializationDto specializationDto;
private List<MultipartFile> files;
}
@PostMapping(consumes = {MediaType.MULTIPART_FORM_DATA_VALUE},
produces = {MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<Object> saveNewTeacher(@ModelAttribute @Valid TeacherDTO teacherDto){
//process request
}
从 Swagger UI 创建示例请求时,我收到以下异常:
type 'java.lang.String' to required type 'SpecializationDto' for property 'specializationDto': no matching editors or conversion strategy found
如果我把 @RequestBody 而不是 @ModelAttribute 然后我得到
Content type 'multipart/form-data;boundary=----WebKitFormBoundaryVEgYwEbpl1bAOjAs;charset=UTF-8' not supported]
Swagger 依赖项:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.5.2</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-data-rest</artifactId>
<version>1.5.2</version>
</dependency>
OpenAPI3.0 配置:
@Configuration
public class OpenApi30Config {
private final String moduleName;
private final String apiVersion;
public OpenApi30Config(
@Value("${spring.application.name}") String moduleName,
@Value("${api.version}") String apiVersion) {
this.moduleName = moduleName;
this.apiVersion = apiVersion;
}
@Bean
public OpenAPI customOpenAPI() {
final var securitySchemeName = "bearerAuth";
final var apiTitle = String.format("%s API", StringUtils.capitalize(moduleName));
return new OpenAPI()
.addSecurityItem(new SecurityRequirement().addList(securitySchemeName))
.components(
new Components()
.addSecuritySchemes(securitySchemeName,
new SecurityScheme()
.name(securitySchemeName)
.type(SecurityScheme.Type.HTTP)
.scheme("bearer")
.bearerFormat("JWT")
)
)
.info(new Info().title(apiTitle).version(apiVersion));
}
}
【问题讨论】:
-
你是不是只从swagger客户端遇到这个问题?
-
是的,我想让它与 swagger UI 一起工作
-
您需要提供更多详细信息,包括招摇版本等,否则很难描述问题(如果有)。
-
@harry 更新了开放的 api 配置。我使用 Open API 3.0
-
你在这里混合了两件事。发布 JSON 对象并发布多部分数据。我建议不要这样做。仅将多部分数据发布到某个端点
标签: java spring spring-boot spring-mvc multipartfile