Zol*_*tán 3 json http-post http-content-length playframework playframework-2.2
当POST我向Play框架操作方法发出一个具有大型主体的请求null时,我会在提取数据时得到.如果身体相当小,我可以很好地检索数据.
这是一个示例短数据集:
{
"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
}
]
}
Run Code Online (Sandbox Code Playgroud)
当我POST在正文中发出使用此JSON 的请求时,一切正常.但是,如果我在geometry数组中添加更多(~4000)个点,我就会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()));
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试在chrome中使用Advanced REST Client并?url发送请求,两者都失败了.
可能是什么问题呢?难道我需要Content-Lenght为大请求添加标头吗?如果是这样,我如何为任意JSON数据手动计算它?
请查看PlayFramework 文档,他们提到请求的默认最大长度为100KB:
最大内容长度
基于文本的正文解析器(例如text,json,xml或formUrlEncoded)使用最大内容长度,因为它们必须将所有内容加载到内存中.
默认内容长度(默认值为100KB).
提示:可以在application.conf中定义默认内容大小:
parsers.text.maxLength = 128K
您还可以通过@ BodyParser.Of注释指定最大内容长度:
// Accept only 10KB of data.
@BodyParser.Of(value = BodyParser.Text.class, maxLength = 10 * 1024)
pulic static Result index() {
if(request().body().isMaxSizeExceeded()) {
return badRequest("Too much data!");
} else {
ok("Got body: " + request().body().asText());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1932 次 |
| 最近记录: |