Я хочу создать метод REST API, который получает строку XML, отправленную POST. Я использую Редактор Swagger для разработки своего REST API сверху вниз и для создания кода заглушки сервера. .
Метод 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
Когда я использую пункт меню Generate Server > Spring редактора Swagger, для метода 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 для отправки некоторого фиктивного XML в метод моей работающей службы Springboot:
Но когда я распечатываю значение 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 напрямую, потому что редактор Swagger создает их. Если мое определение чванства неверно, что я должен использовать вместо этого для публикации строки XML?
На практике XML, скорее всего, будет большим, поэтому его отправка в качестве параметра запроса невозможна. Я также не собираюсь обрабатывать XML, так что можно обращаться с ним как со строкой.