当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。
答案 0 :(得分:0)
神秘解决了!或者...... ...
原来是基础设施问题。我们使用Tierpoint托管我们的服务器,并且防火墙设置不允许超过2MB的响应。至少那是IT人员在我升级问题时向我解释的方式。
感谢所有人的帮助。至少我能够确认在JSON中解析的数据量没有限制。