wake-up-neo.net

Frühling: Wie bekomme ich die Parameter? POST Karosserie?

Webservice mit Spring, bei dem ich die Params aus dem Body meiner Post-Anfrage erhalten muss? Der Inhalt des Körpers ist wie:

source=”mysource”

&json=
{
    "items": [
        {
            "username": "test1",
            "allowed": true
        },
        {
            "username": "test2",
            "allowed": false
        }
    ]
}

Und die Webservice-Methode sieht folgendermaßen aus: -

@RequestMapping(value = "/saveData", headers="Content-Type=application/json", method = RequestMethod.POST)
    @ResponseBody
    public ResponseEntity<Boolean> saveData(@RequestBody String a) throws MyException {
        return new ResponseEntity<Boolean>(uiRequestProcessor.saveData(a),HttpStatus.OK);

    }

Bitte lassen Sie mich wissen, wie ich die Params vom Körper bekomme? Ich kann den ganzen Körper in meiner Saite bekommen, aber ich glaube nicht, dass dies ein gültiger Ansatz wäre. Bitte lass mich wissen, wie ich weitermache.

12
Harinder

Sie können param von Anfrage erhalten.

@ResponseBody
public ResponseEntity<Boolean> saveData(HttpServletRequest request,
            HttpServletResponse response, Model model){
   String jsonString = request.getParameter("json");
}
15
Jason

Sie können den gesamten Post-Body in einen POJO bringen. Folgendes ist etwas Ähnliches

@RequestMapping(value = { "/api/pojo/edit" }, method = RequestMethod.POST, produces = "application/json", consumes = "application/json")
@ResponseBody
public Boolean editWinner( @RequestBody Pojo pojo) { 

Wo jedes Feld in Pojo (einschließlich Getter/Setter) mit dem Json-Anforderungsobjekt übereinstimmen sollte, das der Controller empfängt.

12
alowsarwar

Sie können den Json mit MappingJacksonHttpMessageConverter an ein POJO binden. So kann Ihre Controller-Signatur lesen: -

  public ResponseEntity<Boolean> saveData(@RequestBody RequestDTO req) 

Wo RequestDTO eine Bean sein muss, die mit dem Serialisieren/Deserialisieren von Jackson kompatibel ist. In Ihrer * -servlet.xml-Datei sollte der Jackson-Nachrichtenkonverter wie folgt in RequestMappingHandler registriert sein: -

  <list >
    <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>

  </list>
</property>
</bean>
7
redzedi

In der Klasse so machen

@RequestMapping(value = "/saveData", method = RequestMethod.POST)
 @ResponseBody
    public ResponseEntity<Boolean> saveData(HttpServletResponse response,Bean beanName) throws MyException {
        return new ResponseEntity<Boolean>(uiRequestProcessor.saveData(a),HttpStatus.OK);

}

In Seite wie folgt:

<form enctype="multipart/form-data" action="<%=request.getContextPath()%>/saveData" method="post" name="saveForm" id="saveForm">
<input type="text" value="${beanName.userName }" id="username" name="userName" />

</from>
2

Sie werden diese Importe brauchen ...

import javax.servlet.*;
import javax.servlet.http.*;

Wenn Sie Maven verwenden, benötigen Sie dies auch im Abhängigkeitsblock der Datei pom.xml im Basisverzeichnis Ihres Projekts.

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

Dann wird der oben genannte Fix von Jason funktionieren:

@ResponseBody
    public ResponseEntity<Boolean> saveData(HttpServletRequest request,
        HttpServletResponse response, Model model){
        String jsonString = request.getParameter("json");
    }
1
HoldOffHunger

Sie können @RequestBodyParam verwenden

@RequestMapping(value = "/saveData", headers="Content-Type=application/json", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Boolean> saveData(@RequestBodyParam String source,@RequestBodyParam JsonDto json) throws MyException {
    ...
}

https://github.com/LambdaExpression/RequestBodyParam

0