次のコードを持つ:
@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!";
}
本文のjsonが送信されるにもかかわらず、String json引数は常にnullです。
注私は自動型変換を望まず、単純なjsonの結果が欲しいだけです。
これは例えば動作します:
@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);
}
おそらく、ServletRequestまたはInputStreamを引数として使用して実際の本文を取得することができますが、もっと簡単な方法があるのでしょうか?
私が今まで見つけた最良の方法は次のとおりです。
@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
他の選択肢があれば教えてください。
あなただけを使用することができます
@RequestBody String pBody
HttpServletRequestのみが機能しました。 HttpEntityがヌル文字列を返しました。
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!";
}
私のために働く最も簡単な方法は
@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";
}