Ich möchte eine REST-API-Methode erstellen, die eine vom POST gesendete XML-Zeichenfolge empfängt. Ich verwende Swagger Editor, um meine REST-API von oben nach unten zu entwerfen und den Server-Stubcode zu generieren.Wie Sie eine XML-Zeichenfolge von einem POST RequestBody in Swagger-generiertem Spring Server-Code abrufen?
Die POST-Methode sieht wie folgt in meinem 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
Ich habe auch diese globale Einstellung in der YAML-Datei:
produces:
- application/json
Wenn ich die Prahlerei des Herausgebers Server generieren> Frühling Menüoption Die folgende Schnittstellenmethode wird für die POST-Methode generiert:
@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);
und dies ist die entsprechende Stub-Implementierung:
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);
}
Ich benutze Postman einig Dummy-XML das Verfahren auf meinem Laufen Springboot Dienst zu schreiben:
Aber wenn ich das Ausdrucken Wert von model
innerhalb der Implementierungsmethode mit log.debug("Model XML = " + model);
Ich bekomme so in den Protokollen ausgegeben:
Model XML = ------WebKitFormBoundaryA3o70hOgLFoLLBoY
Content-Disposition: form-data; name="model"
<?xml version="1.0" encoding="utf-8"?><Hello></Hello>
------WebKitFormBoundaryA3o70hOgLFoLLBoY--
Wie bekomme ich nur die XML selbst in den Wert model
? Ich möchte es dies in diesem Beispiel statt sein:
<?xml version="1.0" encoding="utf-8"?><Hello></Hello>
Denken Sie daran, kann ich nicht nur die direkt Signaturen Java-Methode bearbeiten, da die Swagger Editor sie erzeugt. Wenn meine Swagger-Definition falsch ist, was sollte ich stattdessen verwenden, um eine XML-Zeichenkette zu posten?
Die XML in der Praxis ist wahrscheinlich groß, so dass es als Anforderungsparameter keine Option ist. Ich werde das XML auch nicht verarbeiten, daher ist es in Ordnung, es als String zu behandeln.
Danke - das hat funktioniert! Alles, was ich tun musste, war ' Xml version =" 1.0 "encoding =" utf-8 "?> ' im rohen Feld und das wurde vom Dienst empfangen. Also war der Parameter "Modell" überflüssig. –
snark