2017-09-07 1 views
2

Ich habe einen Endpunkt in Spring definiert und ein einzelnes ApiParam als optional definiert.Swagger löst 400 Fehler aus, wenn optionale Abfrage nicht enthalten ist

@RequestMapping(value = "/searchResult/getList", method = RequestMethod.GET) 
@ApiOperation(value = "populate list") 
public JasonMessage getList(@ApiParam(name="id", value = "id", required = false) 
          @RequestParam Integer id) { 

Allerdings, wenn ich die URL ohne den ?id=xxx Parameter zu schreiben, erhalte ich einen 400-Fehler, die ich erwarte, dass eine fehlerhafte URL Fehler.

Warum ist das? Ich habe es als required = false definiert, und es ist keine Pfadvariable, aber es gibt keine Möglichkeit, dass ich die URL ohne mindestens einen leeren Abfrageparameter, wie ?id=, schreiben kann.

Bin ich verwirrt darüber, was ein wirklich optionaler Parameter für URLs ist, ist es ein Problem mit Swagger, ein Problem mit dem Frühling, oder ein Fehler, den ich irgendwo gemacht habe.

Der Antworttext ist no content und der Antwortcode ist nur 400.

Antwort

2

Sie müssen Ihre Anmerkung in @RequestParam(required = false) ändern, das erforderliche Feld ist standardmäßig auf true eingestellt. Zusätzlich können Sie die required auf @ApiParam löschen, da swagger das von Springs-Anmerkungen erkennt.

Denken Sie daran, Swagger Anmerkungen sind für zusätzliche Informationen über Ihre API und haben keinen Einfluss auf die Funktionalität der Endpunkte (außerhalb ihrer API-Seite, die generiert wird).

Zusätzlich sollten Sie den Namen Ihres Anforderungsparameters auf die @RequestParam Annotation setzen, dies ist wieder da Swagger Anmerkungen haben keine Auswirkungen auf Springs Verhalten.

sollte Ihre endgültige Code

@RequestMapping(value = "/searchResult/getList", method = RequestMethod.GET) 
@ApiOperation(value = "populate list") 
public JasonMessage getList(@ApiParam 
          @RequestParam(value = "id", required = false) Integer id) { 
+0

Sie schöne Person lesen. Das ist es genau! Das macht so viel Sinn. Danke für die Antwort! – JDGale8

+0

@ JDGale8 Ihre Begrüßung! Wenn ich mit Swagger + Spring arbeite, würde ich empfehlen, Spring-Anmerkungen zu machen und dann zusätzliche Swagger-Anmerkungen hinzuzufügen, um die Endpunkte zu dekorieren oder zu korrigieren. Swagger ist sehr gut darin, das Verhalten von Springs-Anmerkungen zu erfassen. Zum Beispiel könnten Sie die Annotation "@ ApiParam" alle zusammen von diesem Endpunkt entfernen, da Swagger dies bereits weiß. (Sofern Sie es nicht anders konfiguriert haben) –

Verwandte Themen