在 Springdoc 中表示表单数据和返回字节数组的问题
Problem representing form-data and returning array of byte in Springdoc
我有如下一段代码,
@PostMapping(value = "/create/{userId}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<Object> saveFile(
@Parameter(description = "ID of the user") @PathVariable(value = "userId") final String userId,
@Parameter(description = "Avatar of the user", content = @Content(mediaType = MediaType.APPLICATION_OCTET_STREAM_VALUE)) @RequestParam(value = "avatar", required = true) final MultipartFile file
) {
...
}
@GetMapping(value = "/get", produces = MediaType.IMAGE_PNG_VALUE)
@ApiResponse(responseCode = "200", description = "OK", content = {@Content(array = @ArraySchema(schema = @Schema(implementation = Byte.class)))})
public ResponseEntity<byte[]> getFile() {
...
}
以下是预期结果和实际结果。
如何达到预期的效果?预期结果来自Springfox。
对于文件格式,规范中的非类型字节。你应该发送 type: string, format: binary
.
因此,您的 post 方法的 requestBody 是正确的。
要在您的POST方法中描述return类型的字节数组,您可以添加以下描述:
@ApiResponse(content = @Content(schema = @Schema(type = "string", format = "binary")))
上周我遇到了同样的问题。我的解决方案是通过 SpringDocUtils 将 return 类型 byte-Array 替换为 String:
import org.springframework.context.annotation.Configuration;
import org.springdoc.core.SpringDocUtils;
@Configuration
public class OpenApiConfiguration {
static {
SpringDocUtils.getConfig()
.replaceWithClass(byte[].class, String.class);
}
}
对我来说,这种方法的优点是每个 byte[] 都将替换为 String 表示形式,因此不需要通过 @ApiResponse
进行相应的显式注释。但我认为这取决于用例。
我有如下一段代码,
@PostMapping(value = "/create/{userId}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<Object> saveFile(
@Parameter(description = "ID of the user") @PathVariable(value = "userId") final String userId,
@Parameter(description = "Avatar of the user", content = @Content(mediaType = MediaType.APPLICATION_OCTET_STREAM_VALUE)) @RequestParam(value = "avatar", required = true) final MultipartFile file
) {
...
}
@GetMapping(value = "/get", produces = MediaType.IMAGE_PNG_VALUE)
@ApiResponse(responseCode = "200", description = "OK", content = {@Content(array = @ArraySchema(schema = @Schema(implementation = Byte.class)))})
public ResponseEntity<byte[]> getFile() {
...
}
以下是预期结果和实际结果。
如何达到预期的效果?预期结果来自Springfox。
对于文件格式,规范中的非类型字节。你应该发送 type: string, format: binary
.
因此,您的 post 方法的 requestBody 是正确的。
要在您的POST方法中描述return类型的字节数组,您可以添加以下描述:
@ApiResponse(content = @Content(schema = @Schema(type = "string", format = "binary")))
上周我遇到了同样的问题。我的解决方案是通过 SpringDocUtils 将 return 类型 byte-Array 替换为 String:
import org.springframework.context.annotation.Configuration;
import org.springdoc.core.SpringDocUtils;
@Configuration
public class OpenApiConfiguration {
static {
SpringDocUtils.getConfig()
.replaceWithClass(byte[].class, String.class);
}
}
对我来说,这种方法的优点是每个 byte[] 都将替换为 String 表示形式,因此不需要通过 @ApiResponse
进行相应的显式注释。但我认为这取决于用例。