Avoir le code suivant:
@RequestMapping(value = "/greeting", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
@ResponseBody
public String greetingJson(@RequestBody String json) {
System.out.println("json = " + json); // TODO json is null... how to retrieve plain json body?
return "Hello World!";
}
L'argument String json est toujours nul malgré l'envoi de json dans le corps.
Note que je ne veux pas de conversion de type automatique, je veux juste le résultat json simple.
Cela fonctionne par exemple:
@RequestMapping(value = "/greeting", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
@ResponseBody
public String greetingJson(@RequestBody User user) {
return String.format("Hello %s!", user);
}
Je peux probablement utiliser l'argument use the ServletRequest ou InputStream pour récupérer le corps réel, mais je me demande s'il existe un moyen plus simple?
Le meilleur moyen que j'ai trouvé jusqu'à présent est:
@RequestMapping(value = "/greeting", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
@ResponseBody
public String greetingJson(HttpEntity<String> httpEntity) {
String json = httpEntity.getBody();
// json contains the plain json string
Faites-moi savoir s'il existe d'autres alternatives.
Vous pouvez simplement utiliser
@RequestBody String pBody
Seul HttpServletRequest a fonctionné pour moi. HttpEntity a donné une chaîne nulle.
import Java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.Apache.commons.io.IOUtils;
@RequestMapping(value = "/greeting", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
@ResponseBody
public String greetingJson(HttpServletRequest request) throws IOException {
final String json = IOUtils.toString(request.getInputStream());
System.out.println("json = " + json);
return "Hello World!";
}
moyen le plus simple qui fonctionne pour moi est
@RequestMapping(value = "/greeting", method = POST, consumes = MediaType.ALL_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public String greetingJson(String raw) {
System.out.println("json = " + raw);
return "OK";
}