1

Excel ファイルをサーバーにアップロードする Spring REST API を使用しています。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());

このコードは完璧に機能しますが、次の方法でドキュメントを生成します。

ここに画像の説明を入力

4

1 に答える 1

3

あなたができることがいくつかあります:

1 つのオプションは、ドキュメンテーションの目的でダミー データをコントローラーに送信することです。実際の XLS ファイルを送信する代わりに、 String などを送信できます<<binary XLS data>>。このアプローチでは、実際には XLS ファイルではないデータの受信に対処できるように、コントローラーが XLS データの処理に使用するものをすべてモックアウトできる必要があります。

別のオプションは、を使用することOperationPreprocessorです。これにより、「正しい」リクエストをコントローラーに送信できますが、文書化される前に変更できます。マルチパート アップロードのコンテンツを変更するプリプロセッサを作成できます。

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);

    }
}

プリプロセッサを使用してリクエストとレスポンスをカスタマイズする方法の詳細については、 ドキュメントを参照してください。

于 2016-06-16T16:51:31.357 に答える