如何解决[SWAGGER 2 UI]:启用多部分/表单数据请求
我有一个简单的控制器方法,可以捕获一些 JSON
信息以及任意数量的上传图像文件:
@PostMapping(value = "/products",consumes = MediaType.MULTIPART_FORM_DATA_VALUE )
public ResponseEntity<ResponseMessage> postProduct(@RequestPart(name = "request") final MyJsonBody postRequest,@RequestPart(name = "images") final ist<multipartfile> images)
{
log.info("Request id and name fields: " + postRequest.getProductId() + "," + postRequest.getProductName() + ".");
log.info("Received a total of: " + images.size() + " files.");
return success("Just wanted to test the upload functionality!",null,HttpStatus.OK); // A private method I have to return an appropriate ResponseEntity<> to the user.
}
MyJsonBody
类是一个用于测试目的的简单 POJO:
@Data
@Builder(access = PUBLIC)
@AllArgsConstructor
@NoArgsConstructor
public class MyJsonBody
{
@JsonProperty("id") private String productId;
@JsonProperty("name") private String productName;
}
使用 Postman 时,我的示例 multipart/form-data POST 请求工作正常:
正如您在此处看到的,Springboot 完全可以处理请求并按预期打印数据:
2020-12-21 14:28:20.321 INFO 11176 --- [nio-8080-exec-3] c.j.r.fileuploads.FileUploadController : Request id and name fields: RANDOM_ID,null.
2020-12-21 14:28:20.321 INFO 11176 --- [nio-8080-exec-3] c.j.r.fileuploads.FileUploadController : Received a total of: 2 files.
我的团队使用 Swagger 2,能够使用 Swagger UI 调试 API 对我来说很重要。不幸的是,当从 UI 发送相同的请求时:
用户界面似乎不是将请求作为 multipart/form-data
请求发送,而是作为 application/octet-stream
请求发送:
2020-12-21 14:27:40.095 WARN 11176 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/octet-stream' not supported]
网络上的大多数信息都与 OpenAPI 规范版本 3 相关,但我们目前使用的是版本 2.8。 关于我可能如何使请求格式错误的任何想法?
编辑:以下是我的 Swagger 配置类。我在这个玩具项目中的所有代码都在包 com.jason.rest.fileuploads
下。
@Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurationSupport {
@Bean
public Docket productApi() {
return new Docket(DocumentationType.SWAGGER_2)
.select().apis(RequestHandlerSelectors.basePackage("com.jason.rest.fileuploads"))
.paths(PathSelectors.any())
.build();
}
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/meta-inf/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/meta-inf/resources/webjars/");
}
@Bean
public Linkdiscoverers discoverers() {
List<Linkdiscoverer> plugins = new ArrayList<>();
plugins.add(new CollectionjsonLinkdiscoverer());
return new Linkdiscoverers(SimplePluginRegistry.create(plugins));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。