在使用RestEasy框架处理Quarkus时,我可以使用MultipartFormDataInput
上传文件。此功能按预期工作,但我无法为swagger UI提供适当的OpenAPI注释。我尝试了多种选择和组合,但没有结果。请帮帮我。我在下面提供示例html" target="_blank">代码。
@Operation(summary = "Upload a single file", description = "Upload a single file")
@APIResponses({
@APIResponse(responseCode = "200", description = "Upload file successfully"),
@APIResponse(name = "500", responseCode = "500", description = "Internal service error") })
@RequestBody(content = @Content(
mediaType = MediaType.MULTIPART_FORM_DATA,
schema = @Schema(type = SchemaType.STRING, format = "binary"),
encoding = @Encoding(name = "attachment", contentType = "application/octet-stream")))
@POST
@Path("/singleFile")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.TEXT_PLAIN)
public Response handleFileUpload(@MultipartForm MultipartFormDataInput input) {
String fileName = null;
Map<String, List<InputPart>> uploadForm = input.getFormDataMap();
// Get file data to save
List<InputPart> inputParts = uploadForm.get("attachment");
for (InputPart inputPart : inputParts) {
try {
MultivaluedMap<String, String> header = inputPart.getHeaders();
fileName = getFileName(header);
InputStream inputStream = inputPart.getBody(InputStream.class, null);
byte[] bytes = IOUtils.toByteArray(inputStream);
File customDir = new File(UPLOAD_DIR);
if (!customDir.exists()) {
customDir.mkdir();
}
fileName = customDir.getCanonicalPath() + File.separator + fileName;
Files.write(Paths.get(fileName), bytes, StandardOpenOption.CREATE);
return Response.status(200).entity("Uploaded file name : " + fileName).build();
} catch (Exception e) {
e.printStackTrace();
}
}
return Response.status(200).entity("Uploaded file name : " + fileName).build();
}
我还提到了以下链接。
https://community.smartbear.com/t5/Swagger-Open-Source-Tools/How-to-swagger-annotate-multipart-form-data-with-resteasy/td-p/178776
https://github.com/swagger-api/swagger-core/issues/3050
如果我使用@Schema(type=SchemaType.STRING,format=“binary”)和@PartType(MediaType.APPLICATION\u OCTET\u STREAM)
注释创建一个名为MultipartBody
的单独类,我就能够生成swagger UI。但我的要求是只使用MultipartFormDataInput
。
您几乎做到了:)只需在RequestBody/Schema中使用一个专用类,并告诉OpenAPI忽略方法的参数。
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@RequestBody(content = @Content(mediaType = MediaType.MULTIPART_FORM_DATA,
schema = @Schema(implementation = MultipartBody.class))
)
@Operation(operationId = "uploadFile")
public Response uploadFile(@Parameter(hidden = true) MultipartFormDataInput input) {
//... your logic here
}
需要注意的两件事:@Parameter(隐藏=true)
告诉Smallrye OpenAPI在生成模式模型时不要考虑您的MultipartFormDataInput
。然后你需要告诉显式描述模式,使用@recestBody
,其中MultipartBody
是一个类,它描述了你所有的输入参数(你可以在那里添加更多的参数,如果你想例如传递其他道具和文件负载)
public class MultipartBody {
@FormParam("file")
@Schema(type = SchemaType.STRING, format = "binary", description = "file data")
public String file;
@FormParam("fileName")
@PartType(MediaType.TEXT_PLAIN)
public String fileName;
}
只要确保MultipartBody
中的@FormParam
注释字段与您期望在MultipartFormDataInput
中找到的,,部分相匹配-例如,在您的情况下,文件属性应该具有@FormParam(附件)
问题内容: 我想知道如何用昂扬的方式记录枚举。 根据JavaDoc 数据类型。请参阅文档以获取受支持的数据类型。如果数据类型是自定义对象,请设置其名称,或不设置任何名称。如果是枚举,请为枚举常量使用’string’和allowableValues。 但是我没有找到一些好的Java示例如何真正使用它,规范在这里。 第一服务 第二服务 输入项 天 输出量 pom.xml 您可以在此处查看结果。 我看到
数据类型。有关支持的数据类型,请参见文档。如果数据类型是自定义对象,请设置它的名称,或者不设置任何名称。对于枚举,使用'string'和allowableValues作为枚举常量。 但是我没有找到一些好的Java示例如何真正使用它,规范在这里。 你可以在这里看到结果。 我认为是个问题... 你知道吗?
我们正在为我们的Laravel REST API实现开发Swagger文档。几个POSTendpoint将使用CSV作为参数内容类型。 Swagger中是否有一种方法可以让“立即尝试”功能与CSV POST文件上传一起使用? 下面是我们的留档http://api.curvecompass.com/docs/#/ 我们的Laravel POST函数可以正确地与CSVendpoint一起工作,而不是与
问题内容: 我正在尝试使用swagger定义post端点,但是不允许使用该参数: 当我跑步时,我得到这个: 我的规格有什么问题? 问题答案: 您可能正在混合使用OpenAPI / Swagger 2.0和OpenAPI 3.0语法。您的规格似乎是2.0,但是关键字是3.0功能。在2.0中,请求正文被定义为正文参数: 更多信息:描述请求正文
我正在努力找到配置基本路径的方法。 我想配置基本路径服务器端 我正在使用OpenAPI生成器从一个招摇过市的endpoint(asp核心web api)生成SUB 是否有方法配置不同的基本路径。
这不是springfox的故事,这是springdoc-openapi的故事。 我当前的依赖项 我的物业 此处请求(localhost:8080/swagger-ui.html)我的服务器响应swagger-petstore示例我已经知道petstore-disable(springdoc.swagger-ui.disable-swagger-default-url=true),但它不起作用 另一