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.
Vous pouvez obtenir param sur demande.
@ResponseBody
public ResponseEntity<Boolean> saveData(HttpServletRequest request,
HttpServletResponse response, Model model){
String jsonString = request.getParameter("json");
}
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.
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>
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>
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");
}
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 {
...
}