是否有可以在Json中解析的数据限制?

时间:2017-12-04 19:44:08

标签: java json jackson gson resttemplate

当json文档中的某个字段包含太多字符(用16K以上的字符测试)时,我得到一个解析错误。 如果我删除该字段中的数据,一切都很完美。

我的代码对端点执行GET,该端点返回带有对象数组的JSON文档。如果其中一个对象(假设数组中的数字119)在其中一个字段中有太多字符(恰好是html代码),我会得到以下异常:

Could not read document: Connection reset (through reference chain: Object[][119]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Connection reset (through reference chain: Object[][119])

正如我所说,删除该字段的内容或使其成为正常大小的字符串使其工作。我不相信存在连接重置错误,因为对其他端点(没有那么大的字段)的请求工作正常。

我使用Spring的REST模板,我尝试用Gson替换Jackson映射器,但是我得到了完全相同的行为,并且稍有不同的错误消息(Gson没有指定数组的元素)。 更具体地说,我取而代之:

List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
    messageConverters.add(new MappingJackson2HttpMessageConverter());        
    this.restTemplate.setMessageConverters(messageConverters);

用这个:

List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
        GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
        messageConverters.add(converter);
        this.restTemplate.setMessageConverters(messageConverters);

那么,JSON中的字段是否可以存储和解析数据/字符是否有限制?如果是这种情况,我该如何配置该限制? 还有另一种方法可以实现这一目标而不受限制吗?

这是请求的一个示例:

http://api.myServer.com:8080/api/v1/categories
GET
Headers: 
Content-Type: application/json
Authorization: Basic xxxxxxxxx

这是回复的一个例子:

[
{
    "category_id": "C1",
    "name": "Category 1",
    "short_name": "Cat 1",
    "description": "Description of the category"

},
{
    "category_id": "C2",
    "name": "Category 2",
    "short_name": "Cat 2",
    "description": "very long string, usually well-formed HTML"

},
.
.
.
.
]

我将作为响应的JSON文档(使用Postman)存储到文本文件中,其大小为2.29 MB。

1 个答案:

答案 0 :(得分:0)

神秘解决了!或者...... ...

原来是基础设施问题。我们使用Tierpoint托管我们的服务器,并且防火墙设置不允许超过2MB的响应。至少那是IT人员在我升级问题时向我解释的方式。

感谢所有人的帮助。至少我能够确认在JSON中解析的数据量没有限制。