0

私は REST API の設計に不慣れで、作成しようとしている API について 2 つの質問があります。

PDF ファイルのエンコーディングを指定して、データベースにオブジェクトを作成するサービスを作成したいと考えています。

私の現在のサービスは次のようになります。

@RequestMapping(value = "/create", method = RequestMethod.POST,
    produces = MediaType.APPLICATION_JSON_VALUE,
    consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public String create(@RequestBody byte[] pdf)

私の質問は次のとおりです。

  1. REST API で byte[] を使用することは「推奨」されますか? PS: このサービスは、ツールキットだけでなく Web クライアントによっても使用されます。
  2. springfox を使用して API を文書化しようとしました。UI ツールでバイナリ データを送信できません。

次の注釈を使用しました

    @ApiImplicitParams({
    @ApiImplicitParam(name = "pdf", value = "PDF encoding", required = true,
     allowMultiple = true,
     paramType = "body", dataType = "byte")
  })

生成された JSON は次のとおりです。

{"type":"array","items":{"type":"string","format":"byte"}}

ただし、UI インターフェイスは PDF エンコーディング用のテキストエリアを表示し、コンテンツを文字列として送信します。(たとえば、値「5」を送信すると、サーバーは [53] を受け取ります)。

このレベルで何が欠けているか分かりますか?

- 編集 -

PDF はクライアント側で HTML フォームから生成されます。したがって、単純なフォーム送信ではありません。

4

1 に答える 1

1

ファイルをアップロードするための推奨される方法は、MultipartFile. したがって、署名を以下に示すようなものに変更します。

@RequestMapping(value = "/create", method = RequestMethod.POST,
    produces = MediaType.APPLICATION_JSON_VALUE,
    consumes = MediaType.MULTIPART_FORM_DATA_VALUE) //<-- NOTE THIS
public String create(@RequestParam("pdf") MultipartFile pdf) //<-- NOTE THIS

第二に、ドキュメンテーションについては、まだ心配する必要はあり@ApiImplicitParamsません。上記の解決策が機能するかどうかを確認してください。

swagger-ui で期待どおりに動作することを確認した後。@ApiParam説明などを文書化するために使用します。@ApiImplicitParams名前が示すように、パラメーターを文書化するために使用されますimplicit。たとえば、メソッド シグネチャが生の型を処理し、暗黙的HttpServletRequestにリクエストの一部であるパラメーターを抽出する場合、そのアノテーションを使用します。

于 2016-06-24T02:01:19.433 に答える