2017-12-04 13 views
-1

json 문서의 필드 중 하나에 너무 많은 문자가있는 경우 구문 분석 오류가 발생합니다 (16K 문자 이상으로 테스트 됨). 해당 필드의 데이터를 제거하면 모든 것이 완벽하게 작동합니다.Json에서 구문 분석 할 수있는 데이터의 한계가 있습니까?

내 코드는 개체 배열이 포함 된 JSON 문서를 반환하는 끝점에 대해 GET을 수행합니다. 내가 말했듯이 제거

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]) 

: 오브젝트 필드 중 하나에 너무 많은 문자를 (즉, HTML 코드를 될 일이) 나는 다음과 같은 예외가있다 (의 배열의 숫자 119 가정 해 봅시다) 중 하나가 해당 필드의 내용 또는 정상 크기의 문자열로 만들면 작동합니다. 다른 엔드 포인트 (큰 필드가없는)에 요청을 수행하면 연결 재설정 오류가 발생한다고 생각하지 않습니다.

저는 Spring의 REST 템플릿을 사용하고 잭슨 매퍼를 Gson 's로 대체하려고 시도했지만 약간 다른 오류 메시지 (Gson 's는 배열의 요소를 지정하지 않음)와 똑같은 동작을합니다. 이와

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의 필드가 저장하고 분석 할 데이터/문자의 한계가? 그렇다면 어떻게 제한을 구성 할 수 있습니까? 제한없이이 작업을 수행 할 수있는 또 다른 방법이 있습니까?

[ 
{ 
    "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의 문서를 저장 (우편 배달 사용)

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

이 응답의 예이다 :


요청의 예 텍스트 파일에 저장하고 크기는 2.29MB입니다.

+0

나는 목록 크기가 메모리에 제한된다는 것을 안다. 나는 그런 식으로 한 번 다루어야했다. 파서가 이런 식으로 죽을 수도 있습니까? 그러나 오류 메시지가 해당 메시지에 맞지 않는 것 같습니다. – Simons0n

+0

REST 메서드의 서명과 샘플 응답 문서를 게시 할 수 있습니까? 전체 데이터를 포함 할 필요는 없으며, 엔드 포인트에서 JSON 문서를 보내는 방법에 대해 좀 더 자세히 알아 보려하십시오. (HTTP를 통해 - Content-Length 설정?) –

+0

@ Simons0n 메모리가 충분 해 보입니다. 끝점 호출 전, 도중 및 후에 사용 가능한 메모리를 확인 했으므로 변경 사항이 많지 않습니다. 감사합니다 – AntonioOtero

답변

0

수수께끼! 또는 종류의 ...

그것은 인프라 문제로 밝혀졌다. 우리는 Tierpoint를 사용하여 서버를 호스팅하고 있으며 2MB 이상의 응답을 허용하지 않는 방화벽 설정이있었습니다. 적어도이 문제를 제기 할 때 IT 담당자가 설명했습니다.

귀하의 도움에 감사드립니다. 적어도 JSON에서 구문 분석 될 데이터의 양에 대한 제한이 없다는 것을 확인할 수있었습니다.