41 Stimmen

Wie man post array parameter in Spring MVC übergibt

Ich habe mich gerade gefragt, wie man Post-Parameter wie folgendes Auszug aus HTML-Optionen übergeben kann, normalerweise würde ich ein Array in einer Sprache wie PHP bekommen (POST['param'][0]... würde ich glauben).

url?param=value1¶m=value2¶m=value3

Ich habe es versucht:

@RequestMapping(value="/schedule", method = RequestMethod.POST)
public void action(String[] param)

Aber aus irgendeinem Grund funktioniert das nicht...

Alle Ideen wären sehr willkommen!

55voto

kaleemsagard Punkte 714

Sie können dies verwenden:

@RequestMapping(value="/schedule", method = RequestMethod.POST)
public void action(@RequestParam(value = "param[]") String[] paramValues){...}

Es werden alle Werte (im Array paramValues) des Parameters param abgerufen (beachten Sie das Attribut value von RequestParam: es endet mit [])

8voto

splonk Punkte 1035

Dies sollte funktionieren:

@RequestMapping(value="/schedule", method = RequestMethod.POST)
public void action(@RequestParam("param") String[] param)

5voto

Antoniossss Punkte 28468

Wenn jemand immer noch damit zu kämpfen hat, so sollte es gemacht werden:

Formulareingaben:

Controller Methode:

   @RequestMapping
    public String deletePlaces(@RequestParam("myParam") Long[] myParams) {

      //myParams wird 3 Elemente mit den Werten 1,4 und 19 haben
    }

Dies funktioniert genauso für String[] Integer[] Long[] und wahrscheinlich mehr. POST,GET,DELETE werden auf die gleiche Weise funktionieren.

Der Parametername muss mit dem name-Tag der Formulareingabe übereinstimmen. Kein zusätzliches [] erforderlich usw. Tatsächlich kann der Parameternamen weggelassen werden, wenn der Methodenargumentname mit dem Eingabenamen übereinstimmt. So kann die Methodensignatur wie folgt aussehen:

   @RequestMapping
   public String deletePlaces(@RequestParam Long[] myParams) 

und es wird trotzdem funktionieren

Etwas Extra: Nun, wenn Sie ein Domain-Modell haben, sagen wir Place und Sie haben ein PlaceRepository, indem Sie Place#id als Wert für Ihre Eingaben angeben, kann Spring verwandte Objekte für uns nachschlagen. Also, wenn wir annehmen, dass die oben genannten Formulareingaben Benutzer-IDs als Werte enthalten, können wir dies einfach in den Controller schreiben:

public String deletePlaces(@RequestParam Place[] places) {
  //places wird mit den entsprechenden Einträgen aus der Datenbank befüllt!
 }

Süß, nicht wahr?

4voto

RicoZ Punkte 825

Wenn Sie den Parameternamen kennen, versuchen Sie es

@RequestMapping(value="/schedule", method = RequestMethod.POST)
public void action(@RequestParam("myParam") String param)

Ein weiterer Weg ist die Verwendung des aktuellen Request-Objekts:

@RequestMapping(value="/schedule", method = RequestMethod.POST)
public void action(HttpServletRequest request) {
Map parameterMap = request.getParameterMap();
...

}

4voto

jjack Punkte 136
@RequestMapping(value="/schedule", method = RequestMethod.POST)
public void action(@RequestParam(value = "param[]") String[] paramValues {...}

Dies funktioniert, wenn Sie beispielsweise ajax mit jQuery senden:

$.ajax({
    type: "POST",
    data: { param:paramValues }
    ...
});

aber wenn Sie nur ein einzelnes Element-Array mit einem String senden, der Kommas enthält, wie "foo,baa", wird Spring diesen String aufteilen und ein Array mit 2 Elementen "foo" und "baa" erstellen. Seien Sie also vorsichtig mit Kommas, wenn Ihr Array auch ein einzelnes Element enthalten kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X