2017-05-03 6 views
0

Gibt es einen Grund, der erklärt, warum ich einen Kompilierungsfehler erhalten (Body parameters cannot be used with form parameters), wenn eine feign Schnittstelle Methode wie folgt erklären:Springcloud Netflix Feign Parameter bestellen

1) foo(@PathVariable("pathVariableName") String pathVariable, 
     @RequestBody List<String> anyVariable) 

aber alles funktioniert gut, wenn ich diese verwenden (Schalt die Parameterreihenfolge):

2) foo(@RequestBody List<String> anyVariable, 
     @PathVariable("pathVariableName") String pathVariable) 

Im aktuellen Projekt funktionieren alle anderen Scheinmethoden in der ehemaligen Form gut. Ich weiß nicht, ob diese Information wichtig ist, aber dies ist die einzige, in der ich versuche, eine mit dem Parameter @RequestBody annotierte Liste zu verwenden.

Ist die Reihenfolge der Parameter hier so wichtig answer? In welchem ​​Fall sollte ich in diesem Fall auf die Parameterreihenfolge achten? Feign documentation scheint es so zu benutzen, wie ich das Problem habe.

Übrigens habe ich mein Projekt für ein paar Minuten gestoppt, um dies hier, , vor dem Versuch, die Anwendung zu starten, nur nach einer erfolgreichen Kompilierung. Ich bin nicht wirklich sicher, ob der zweite Weg oben zur Laufzeit gut funktioniert. Es ist einfach an der Kompilierungsphase ohne Fehler vorbeigegangen.

EDIT: Dies ist nicht wirklich ein Kompilierungsfehler. Der Fehler tritt während des Startvorgangs der Springboot-Anwendung auf.

Antwort

2

Sie müssen Ihre URL-Vorlage überprüfen. Wenn es {pathVariableName} in der URL nicht enthält, wird @PathVariable("pathVariableName") als Formularparameter behandelt. In diesem Fall können Formularparameter nicht mit einem body-Parameter (@RequestBody) in derselben Methode verwendet werden. Deshalb wirft die 1) Ausnahme.

Im zweiten Fall, wenn Validierung @RequestBody Annotation, Schein nicht die Existenz des zweiten Parameters, die als Formparameter behandelt werden. Es gibt also keine Ausnahme. Ich bin mir nicht sicher, ob das ein absichtliches Verhalten ist oder nicht, aber wahrscheinlich könnte es ein Validierungsfehler sein.

+0

Die Pfadvariable ist in URL. Es hat uns eine offene Frage hinterlassen: Wenn es so aussieht, als wäre es ein Validierungsfehler, warum ist es nur in diesem speziellen Fall aufgetreten? Ich habe in diesen Projekten eine Menge Methoden Aufrufe und 20% -30% von ihnen machen einen Post mit PathVariable und RequestBody. Keiner beschwert sich über die Verwendung von PathVariable als den ersten Parameter zum Zeitpunkt der Kompilierung. Ich denke, was Sie sagten, macht Sinn, wenn Sie die beiden Anmerkungen nicht zusammen verwenden. Aber wie gesagt, ich habe sie noch nicht getestet (ich werde heute mit der Testphase beginnen). Ich beabsichtige, die Ergebnisse hier zu veröffentlichen, sobald ich die POST-Tests abgeschlossen habe. – jpavel

+1

Hat Ihre URL-Zeichenfolge Pfadparameter-Platzhalter mit '{xxx}' im Fehlerfall? Was ich von feign source herausgefunden habe, ist, dass feign PathVariable als Form-Parameter behandelt, wenn in der url-Zeichenkette kein Platzhalter Platzhalter vorhanden ist. Und Form-Parameter und RequestBody können nicht zusammen verwendet werden. –

+0

mein Fehler. Beschämt über mich selbst. Ich habe "appID" in PathVariable falsch eingegeben. Ich hatte "appId" (Kleinbuchstaben "d") eingegeben. Es tut mir sehr leid, dass du dir wegen dieses dummen Fehlers Zeit genommen hast. – jpavel

Verwandte Themen