我有一个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());
此规范运作良好,但以下列方式生成文档。
答案 0 :(得分:2)
您可以做几件不同的事情:
一种选择是将一些虚拟数据发送到控制器以进行记录。您可以发送字符串<<binary XLS data>>
或类似字符,而不是发送实际的XLS文件。这种方法要求您能够模拟控制器用于处理XLS数据的任何内容,以便它可以处理接收实际上不是XLS文件的数据。
另一种选择是使用OperationPreprocessor
。这允许您发送&#34;正确的&#34;请求您的控制器,然后在记录之前对其进行修改。您可以编写一个修改分段上传内容的预处理器:
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);
}
}
您可以在the documentation中找到有关使用预处理器自定义请求和响应的详细信息。