Je souhaite créer une méthode API REST qui reçoit une chaîne XML envoyée par POST. J'utilise Swagger Editor pour concevoir mon API REST de manière descendante et pour générer le code de remplacement du serveur.Comment récupérer une chaîne XML à partir d'un POST RequestBody dans un code de serveur Spring généré par Swagger?
La méthode POST ressemble à ceci dans mon 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
J'ai aussi ce paramètre global dans le fichier YAML:
produces:
- application/json
Lorsque j'utilise le de Swagger Editor Générer serveur> Spring option de menu la méthode d'interface suivante est générée pour la méthode 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);
et c'est la mise en œuvre du talon correspondant:
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);
}
J'utilise Postman d'afficher du XML factice à la méthode sur mon service Springboot de fonctionnement:
Mais quand j'imprimer le valeur de model
à l'intérieur de la méthode de mise en œuvre avec log.debug("Model XML = " + model);
Je reçois une sortie comme celle-ci dans les journaux:
Model XML = ------WebKitFormBoundaryA3o70hOgLFoLLBoY
Content-Disposition: form-data; name="model"
<?xml version="1.0" encoding="utf-8"?><Hello></Hello>
------WebKitFormBoundaryA3o70hOgLFoLLBoY--
Comment puis-je obtenir uniquement le XML lui-même dans la valeur de model
? Je veux que ce soit ce lieu dans cet exemple:
<?xml version="1.0" encoding="utf-8"?><Hello></Hello>
Rappelez-vous que je ne peux pas modifier les signatures de méthode Java directement parce que l'éditeur est Swagger les générer. Si ma définition swagger est fausse, que devrais-je utiliser à la place pour publier une chaîne XML? En pratique, le code XML est susceptible d'être volumineux, l'envoyer en tant que paramètre de requête n'est donc pas une option. Je ne vais pas non plus traiter le XML, donc je peux le traiter comme une chaîne de caractères.
Merci - cela a fonctionné! Tout ce que j'avais à faire était de mettre Xml version = "1.0" encoding = "utf-8"?> 'dans le champ brut et c'est ce qui a été reçu par le service. Le paramètre 'model' était donc redondant. –
snark