POSTによって送信されたXML文字列を受け取るREST APIメソッドを作成したいとします。私はSwagger Editorを使ってREST APIのトップダウンを設計し、サーバースタブコードを生成しています。Swaggerで生成されたSpringサーバーコードのPOST RequestBodyからXML文字列を取得する方法は?
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
を>春メニューオプション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);
、これは、対応するスタブ実装である:私はプリントアウトしたときに
しかし:私は、実行中のSpringbootサービスの方法にいくつかのダミーXMLを投稿するポストマンを使用
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);
}
実装方法の中で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>
が闊歩エディタがそれらを生成しているので、私はちょうど直接Javaメソッドのシグネチャを編集することはできません覚えておいてください。私のすっきりした定義が間違っている場合、代わりにXML文字列をポストするために何を使用すべきですか?
XMLは実際には大きく、リクエストパラメータとして送信することはオプションではありません。私もXMLを処理するつもりはないので、文字列として扱うことは大丈夫です。
ありがとうございました!私がしなければならなかったのは、生のフィールドに '<?xml version =" 1.0 "encoding =" utf-8 "?> 'を入れてサービスで受け取ったものです。したがって、パラメータ 'model'は重複していました。 –
snark