Wie erhalte ich explizit Postdaten in Spring MVC?

Lesezeit: 1 Minute

Gibt es eine Möglichkeit, die Postdaten selbst zu erhalten? Ich kenne Federgriffe, die Postdaten an Java-Objekte binden. Aber wie kann ich bei zwei Feldern, die ich verarbeiten möchte, diese Daten erhalten?

Angenommen, mein Formular hätte zwei Felder:

 <input type="text" name="value1" id="value1"/>
 <input type="text" name="value2" id="value2"/>

Wie würde ich vorgehen, um diese Werte in meinem Controller abzurufen?

Benutzer-Avatar
Jakob Mattison

Wenn Sie eine der integrierten Controller-Instanzen verwenden, ist einer der Parameter für Ihre Controller-Methode das Request-Objekt. Du kannst anrufen request.getParameter("value1") um den POST- (oder PUT-) Datenwert zu erhalten.

Wenn Sie Spring MVC-Anmerkungen verwenden, können Sie den Parametern Ihrer Methode einen annotierten Parameter hinzufügen:

@RequestMapping(value = "/someUrl")
public String someMethod(@RequestParam("value1") String valueOne) {
 //do stuff with valueOne variable here
}

  • Funktioniert das mit mehreren Anfrageparametern, ist es richtig? Sie müssen kein Objekt einpacken? stackoverflow.com/q/12862320/106261

    – NimChimpsky

    12. Oktober 2012 um 16:22 Uhr

  • <3 dies für Zeiten, in denen Sie kein modellgestütztes Formular wünschen/benötigen (für ein Suchformular oder ein Kontaktformular usw.)

    – Don Cheadle

    2. Februar 2015 um 1:16 Uhr

Eine andere Antwort auf die genaue Frage des OP ist die Einstellung der consumes Inhaltstyp zu "text/plain" und deklariere dann a @RequestBody String Eingabeparameter. Dadurch wird der Text der POST-Daten wie deklariert übergeben String Variable (postPayload im folgenden Beispiel).

Dies setzt natürlich voraus, dass es sich bei Ihrer POST-Nutzlast um Textdaten handelt (wie im OP angegeben).

Beispiel:

    @RequestMapping(value = "/your/url/here", method = RequestMethod.POST, consumes = "text/plain")
    public ModelAndView someMethod(@RequestBody String postPayload) {    
        // ...    
    }

  • Das ist die Antwort, nach der ich gesucht habe. Unter “die Postdaten selbst” verstehe ich dasselbe. Vielen Dank!

    – Mauromartini

    3. Dezember 2014 um 2:35 Uhr


  • Für mehrere Post-Parameter (wie z value1 und value2, würde dies einen String für beide Werte erstellen? Dann müssten Sie die einzelnen Werte analysieren? Warum tun Sie das, wenn Sie jeden Wert einzeln wie in der akzeptierten Antwort angeben/erhalten können?

    – Don Cheadle

    2. Februar 2015 um 1:18 Uhr

  • @mmcrae – es ist einfach eine andere Möglichkeit, das Problem zu lösen, und vielleicht nützlich für andere Benutzer, die nicht mehrere POST-Parameter haben, sondern nur einen Text oder binäre Daten. Das war meine Situation, und das war es, was ich zu erfahren hoffte, als ich auf diese Frage klickte.

    – Simon

    6. Februar 2015 um 20:38 Uhr


  • Genau das, wonach ich gesucht habe. Es funktioniert auch mit “consumes=”application/json”, wenn json gepostet wird.

    – Manisch

    14. Mai 2016 um 5:13 Uhr

  • Hallo. Ich benutze Postbote um meine API zu testen. Postman hilft mir, den Body für POST mit Daten zu füllen. Das Problem ist, dass ich 403 bekomme, wenn ich benutze RequestMethod.POST. Ich habe sogar hinzugefügt @CrossOrigin(origins = "*") aber ich bekomme immer noch dasselbe … Ich weiß nicht, was los ist … Ich habe dieselbe Signatur wie Ihre Antwort verwendet (außer das someMethod gibt a zurück String in meinem Fall)…

    – Kurt Müller

    3. April 2018 um 17:00 Uhr

Spring MVC läuft auf der Servlet-API. Sie können also verwenden HttpServletRequest#getParameter() dafür:

String value1 = request.getParameter("value1");
String value2 = request.getParameter("value2");

Das HttpServletRequest sollte Ihnen bereits in Spring MVC als eines der Methodenargumente von zur Verfügung stehen handleRequest() Methode.

  • Hai @BalusC, in meinem Fall habe ich mehr als 20 Variablen angefordert. Allerdings habe ich eine Bean mit allen Request-Param-Variablen. Jetzt möchte ich alle Werte von Request in Bean bekommen, anstatt einen nach dem anderen zu bekommen. Wir haben diese Funktion in struts2 durch die Verwendung von “ModelDrivenBean”. Haben wir eine solche Funktion im Frühlingsrahmen?

    – vissu

    17. April 2012 um 9:38 Uhr

  • Ja, unter Verwendung der Annotation @ModelAttribute und einer Form-Backing-Bean. Dieser Link beschreibt schön, wie das geht: viralpatel.net/blogs/2010/07/spring-3-mvc-handling-forms.html

    Benutzer4903

    18. April 2012 um 14:13 Uhr

  • @vissu Wenn Sie mehr als 20 Variablen haben, sollten Sie sich wirklich mit der Vereinfachung befassen

    – CodeMonkey

    12. Oktober 2016 um 18:38 Uhr

  • Hallo BalusC. Nach Simmons Antwort unten verwende ich Postbote um meine API zu testen. Postman hilft mir, den Body für POST mit Daten zu füllen. Das Problem ist, dass ich 403 bekomme, wenn ich benutze RequestMethod.POST. Ich habe sogar hinzugefügt @CrossOrigin(origins = "*") aber ich bekomme immer noch dasselbe … Ich weiß nicht, was los ist … Ich habe dieselbe Signatur wie Ihre Antwort verwendet (außer das someMethod gibt a zurück String in meinem Fall)…

    – Kurt Müller

    3. April 2018 um 17:02 Uhr

Sie können einfach das gewünschte Attribut ohne Anmerkungen in Ihrem Controller übergeben:

@RequestMapping(value = "/someUrl")
public String someMethod(String valueOne) {
 //do stuff with valueOne variable here
}

Funktioniert mit GET und POST

1245980cookie-checkWie erhalte ich explizit Postdaten in Spring MVC?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy