web-dev-qa-db-fra.com

Spring: Comment obtenir les paramètres de POST corps?

Service Web utilisant un ressort dans lequel je dois obtenir les paramètres du corps de ma demande de publication? Le contenu du corps est comme: -

source=”mysource”

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

Et la méthode de service Web ressemble à: -

@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);

    }

S'il vous plaît laissez-moi savoir comment puis-je obtenir les paramètres du corps? Je peux avoir tout le corps dans ma ficelle mais je ne pense pas que ce serait une approche valable. S'il vous plaît laissez-moi savoir comment puis-je procéder plus loin.

12
Harinder

Vous pouvez obtenir param sur demande.

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

Vous pouvez obtenir le corps entier du message dans un POJO. Suivre quelque chose de similaire

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

Où chaque champ de Pojo (y compris les getter/setters) doit correspondre à l'objet de requête Json que le contrôleur reçoit.

12
alowsarwar

Vous pouvez lier le JSON à un POJO en utilisant MappingJacksonHttpMessageConverter. Ainsi, votre signature de contrôleur peut lire: -

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

Lorsque RequestDTO doit être un bean annoté de manière appropriée pour fonctionner avec la sérialisation/désérialisation jackson. Le convertisseur de messages de Jackson doit être enregistré dans RequestMappingHandler dans votre fichier * -servlet.xml comme suit: -

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

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

En classe fais comme ça

@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);

}

Dans la page faire comme ceci:

<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

Vous aurez besoin de ces importations ...

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

Et si vous utilisez Maven, vous en aurez également besoin dans le bloc des dépendances du fichier pom.xml situé dans le répertoire de base de votre projet.

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

Ensuite, le correctif ci-dessus de Jason fonctionnera:

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

Vous pouvez essayer d'utiliser @RequestBodyParam

@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
LambdaExpression