Ich sende einige Parameter aus einem Formular auf folgende Weise:
myparam[0] : 'myValue1'
myparam[1] : 'myValue2'
myparam[2] : 'myValue3'
otherParam : 'otherValue'
anotherParam : 'anotherValue'
...
Ich weiß, dass ich alle Parameter in der Controller-Methode durch Hinzufügen eines Parameters wie erhalten kann
public String controllerMethod(@RequestParam Map<String, String> params){
....
}
Ich möchte die Parameter myParam [] (nicht die anderen) an eine Liste oder ein Array binden (alles, was die Indexreihenfolge beibehält), also habe ich es mit einer Syntax wie der folgenden versucht:
public String controllerMethod(@RequestParam(value="myParam") List<String> myParams){
....
}
und
public String controllerMethod(@RequestParam(value="myParam") String[] myParams){
....
}
aber keiner von ihnen bindet die myParams. Selbst wenn ich der Karte einen Wert hinzufüge, können die Parameter nicht gebunden werden:
public String controllerMethod(@RequestParam(value="myParam") Map<String, String> params){
....
}
Gibt es eine Syntax, um einige Parameter an eine Liste oder ein Array zu binden, ohne ein Objekt als @ModelAttribute mit einem Listenattribut erstellen zu müssen?
Vielen Dank
HandlerMethodInvoker.resolveRequestParam
bekommt immer nur den ersten Wertmethod = RequestMethod.GET
odermethod = RequestMethod.POST
? Wenn erfolgreich.GET
@RequestParam List<String> groupVal
erfüllt?groupVal=kkk,ccc,mmm
( Spring Boot )Antworten:
Arrays in
@RequestParam
werden zum Binden mehrerer gleichnamiger Parameter verwendet:Wenn Sie
@ModelAttribute
indizierte Parameter im Stil binden müssen, brauchen Sie diese wahrscheinlich@ModelAttribute
trotzdem.quelle
Oder Sie könnten es einfach so machen:
Das funktioniert zum Beispiel bei solchen Formularen:
Dies ist die einfachste Lösung :)
quelle
List<String>
. Es ist auch möglich, eine Java-Bohne wieList<MyBean>
Als Ergänzung zu den Aussagen von Donal Fellows können Sie List mit @RequestParam verwenden
Ich hoffe es hilft!
quelle
Abonnieren Sie, was Basilikum in einem Kommentar zur Frage selbst gesagt hat, wenn
method = RequestMethod.GET
Sie verwenden können@RequestParam List<String> groupVal
.Das Aufrufen des Dienstes mit der Liste der Parameter ist dann so einfach wie:
quelle
Eine Möglichkeit, dies (auf hackige Weise) zu erreichen, besteht darin, eine Wrapper-Klasse für die zu erstellen
List
. So was:Dann würde Ihre Controller-Methodensignatur folgendermaßen aussehen:
Sie müssen die Annotation
@RequestParam
oder nicht verwenden,@ModelAttribute
wenn der Sammlungsname, den Sie in der Anforderung übergeben, mit dem Sammlungsfeldnamen der Wrapper-Klasse übereinstimmt. In meinem Beispiel sollten Ihre Anforderungsparameter folgendermaßen aussehen:quelle
Mir war nicht klar, dass Sie zwar eine Sammlung als Anforderungsparameter akzeptieren können, aber auf der Verbraucherseite die Sammlungselemente dennoch als durch Kommas getrennte Werte übergeben müssen .
Zum Beispiel, wenn die serverseitige API so aussieht:
Die direkte Übergabe einer Sammlung an das RestTemplate als RequestParam wie unten führt zu einer Beschädigung der Daten
Stattdessen können Sie verwenden
Das vollständige Beispiel finden Sie hier , hoffe, es erspart jemandem die Kopfschmerzen :)
quelle
Ändern Sie den Wert für versteckte Felder mit dem Kontrollkästchen wie unten umschalten ...
HTML:
Skript:
quelle