Получить строку тела запроса, отправленную в запросе POST, в java framework

Я использую play framework в Java. Я хочу получить весь орган запроса, отправленный в POST-запросе на игровой сервер. Как я могу получить его?

Ответ 1

Взгляните на класс play.mvc.Http, у вас есть некоторые опции (в зависимости от формата данных), т.е.

RequestBody body = request().body();
MultipartFormData formData = request().body().asMultipartFormData();
Map<String, String[]> params = request().body().asFormUrlEncoded();
JsonNode json = request().body().asJson();
String bodyText = request().body().asText();

Вы можете протестировать request().body().asText(), используя cUrl из командной строки:

curl  -H "Content-Type: text/plain" -d  'Hello world !' http://domain.com/your-post-action

... или используя какой-либо инструмент, например плагин для браузера: https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo

Ответ 2

С Play Framework 2.3 можно получить исходный текст json, даже заголовок Content-Type - application/json

def postMethod = Action(parse.tolerantText) { request =>
    val txt = request.body
}

Ответ 3

Если вы вызываете следующий код в запросе,

String bodyText = request().body().asText();

bodyText будет null, если заголовок Content-Type является application/json

Невозможно использовать предоставленные API-интерфейсы контроллера только для получения текста JSON, если заголовок Content-Type является application/json без предварительной конвертации в JsonNode

Итак, лучший способ сделать это, если приложение /json - это заголовок Content-Type,

String bodyText = request().body().asJSON().toString();

Это часть сбоя в игре, потому что у них должен быть только способ, чтобы тело запроса было как String независимо от того, что такое заголовок Content-Type.