Как получить доступ к простому корпусу json в контроллере отдыха Spring?
Имея следующий код:
@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!";
}
Аргумент String json всегда равен нулю, несмотря на то, что json отправляется в тело.
Примечание, что я не хочу автоматического преобразования типов, мне просто нужен простой результат 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 в качестве аргумента для получения фактического тела, но мне интересно, есть ли более простой способ?
Ответы
Ответ 1
Лучший способ, который я нашел до сих пор:
@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
Сообщите мне, есть ли другие альтернативы.
Ответ 2
Вы можете просто использовать
@RequestBody String pBody
Ответ 3
У меня работал только 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!";
}
Ответ 4
Самый простой способ, который работает для меня, -
@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";
}