Excel使用Spring-doc上传API文档

我有一个Spring REST API上传Excel文件到服务器。我需要用spring和AsciiDoc编写一个API文档。 我试图按照以下方式编写文档,但在文档HTML中,它显示了来自Excel的编码字符。

final URL resource = MYClass.class.getResource("/excel/excel.xls"); final File file = new File(resource.toURI()); final FileInputStream fileInputStream = new FileInputStream(file); final MockMultipartFile fstmp = new MockMultipartFile("file", file.getName(), "multipart/form-data", fileInputStream); UriComponentsBuilder url= uri.path("/api/v1/uploadExcel") .queryParam("file", fstmp); document.snippets( requestParameters( parameterWithName("file").description("Excel file to upload") ) ); mockMvc.perform(MockMvcRequestBuilders.fileUpload(url.toUriString()).file(fstmp)).andExpect(status().isOk()); 

此代码工作完善,但以下列方式生成文档。

在这里输入图像说明

有几件事你可以做:

一种select是将一些虚拟数据发送到您的控制器用于文档的目的。 您可以发送string<<binary XLS data>>或类似<<binary XLS data>> ,而不是发送实际的XLS文件。 这种方法要求你能够模拟出你的控制器用来处理XLS数据,以便它可以处理接收的数据实际上不是一个XLS文件。

另一种select是使用OperationPreprocessor 。 这可以让你发送一个“正确的”请求给你的控制器,然后在logging之前修改它。 您可以编写一个预处理器,修改多段上传的内容:

 final class PartContentModifyingPreprocessor extends OperationPreprocessorAdapter { private final OperationRequestPartFactory partFactory = new OperationRequestPartFactory(); private final OperationRequestFactory requestFactory = new OperationRequestFactory(); @Override public OperationRequest preprocess(OperationRequest request) { List<OperationRequestPart> parts = new ArrayList<>(); for (OperationRequestPart part : request.getParts()) { parts.add(this.partFactory.create(part.getName(), part.getSubmittedFileName(), "<<binary data>>".getBytes(), part.getHeaders())); } return this.requestFactory.create(request.getUri(), request.getMethod(), request.getContent(), request.getHeaders(), request.getParameters(), parts); } } 

您可以在文档中find有关使用预处理器自定义请求和响应的更多信息。

Interesting Posts