POST で送信された XML 文字列を受け取る REST API メソッドを作成したいと考えています。Swagger Editorを使用して、REST API をトップダウンで設計し、サーバー スタブ コードを生成しています。
my の POST メソッドは次のようになりますswagger.yaml
。
/models:
post:
summary: Store a model.
description: Stores the XML content of the specified model.
consumes:
- application/xml;charset=UTF-8
parameters:
- name: model
in: body
description: The model XML you want to store
schema:
type: string
required: true
responses:
201:
description: Model stored successfully
headers:
location:
description: URL of the stored model.
type: string
yaml ファイルには、次のグローバル設定もあります。
produces:
- application/json
Swagger Editor の[Generate Server] > [Spring ] メニュー オプションを使用すると、POST メソッドに対して次のインターフェイス メソッドが生成されます。
@ApiOperation(value = "Store a model.", notes = "Stores the XML content of the specified model.", response = Void.class, tags={ })
@ApiResponses(value = {
@ApiResponse(code = 201, message = "Model stored successfully", response = Void.class) })
@RequestMapping(value = "/models",
produces = { "application/json" },
consumes = { "application/xml;charset=UTF-8" },
method = RequestMethod.POST)
ResponseEntity<Void> modelsPost(
@ApiParam(value = "The model XML you want to store" ,required=true ) @RequestBody String model);
これは、対応するスタブの実装です。
public ResponseEntity<Void> modelsPost(
@ApiParam(value = "The model XML you want to store" ,required=true ) @RequestBody String model
) {
// do some magic!
return new ResponseEntity<Void>(HttpStatus.OK);
}
Postman を使用して、実行中の Springboot サービスのメソッドにダミーの XML をポストします。
しかしmodel
、実装メソッド内の値をlog.debug("Model XML = " + model);
出力すると、ログに次のような出力が得られます。
Model XML = ------WebKitFormBoundaryA3o70hOgLFoLLBoY
Content-Disposition: form-data; name="model"
<?xml version="1.0" encoding="utf-8"?><Hello></Hello>
------WebKitFormBoundaryA3o70hOgLFoLLBoY--
XML 自体だけを の値にするにはどうすればよいmodel
ですか? この例では、代わりにこれになりたい:
<?xml version="1.0" encoding="utf-8"?><Hello></Hello>
Swagger Editor が生成しているため、Java メソッド シグネチャを直接編集することはできません。私の闊歩定義が間違っている場合、XML 文字列を投稿する代わりに何を使用すればよいですか?
実際の XML は大きくなる可能性が高いため、要求パラメーターとして送信することはできません。また、XML を処理するつもりもないので、文字列として扱っても問題ありません。