При выдаче запроса POST
с большим телом к моему методу действия в платформе Play я получаю null
при извлечении данных. Если тело довольно мало, я могу получить данные просто отлично.Запрос POST с большим телом, полученным пустым на стороне сервера
Вот образец короткий набор данных:
{
"creator": "zoltan",
"sport": "hike",
"geometry": [
{
"time": "2009-07-10 12:56:10 +0000",
"x": 10.275514,
"y": 47.514749,
"z": 756.587
},
{
"time": "2009-07-10 12:56:19 +0000",
"x": 10.275563,
"y": 47.514797,
"z": 757.417
}
]
}
Когда я выдать POST
запрос с этим JSON в теле, все работает отлично. Однако, если я добавлю еще много (~ 4000) точек в массиве geometry
, я получаю null
в действии.
Вот мой метод действия:
@Transactional
//@BodyParser.Of(Json.class) // tried with this as well
public static Result createTour() {
LOG.debug("Raw request body: " + request().body().asText());
JsonNode node = request().body().asJson();
LOG.debug("JSON request body: " + node);
TourDto tourDto;
try {
tourDto = jsonToTour(node);
int id = TourDataAccessUtils.create(tourDto);
return created(toJson(id));
} catch (JsonProcessingException e) {
LOG.error("While parsing JSON request.", e);
return Results.badRequest(
toJson(Throwables.getRootCause(e).getMessage()));
}
}
Я попытался использовать оба клиента Advanced REST в хроме и ċurl
отправить запрос, как не удалось.
В чем может быть проблема? Может быть, мне нужно включить заголовок Content-Lenght
для больших запросов? Если да, то как я могу вручную вычислить его для любых данных JSON?
Да, я только что узнал об этом. Он работает сейчас. Спасибо, в любом случае. Примите и повысите на меня :) –
Я хочу, чтобы 'request(). Body()' выбрал исключение, когда была превышена длина содержимого. Это действительно загадочно. –