2017-12-04 17 views
-1

jsonドキュメントのフィールドの1つが多すぎて(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]) 

:オブジェクトの一つは、(のは配列の119番をしましょう)(それはHTMLコードであることを起こる)分野の一つにあまりにも多くの文字が含まれている場合は、私は、次の例外を取得しますそのフィールドの内容または通常のサイズの文字列にすることで動作します。私は、他のエンドポイント(大きなフィールドを持たない)へのリクエストをうまく動作させるので、接続リセットエラーがあるとは思わない。

私はSpringのREST Templateを使用していますが、JacksonのマッパーをGsonのものに置き換えようとしましたが、ちょっと違うエラーメッセージ(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のフィールドを格納することができ、解析でき、データ/文字の制限がありますか?そのような場合は、どうすればその制限を設定できますか? 制限なしにこれを達成する別の方法はありますか?


これは要求の例である:

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ドキュメントが格納されていますテキストファイルに変換し、サイズは2.29 MBです。

+0

私はリストサイズのメモリには限界があることを知っています。私はそのようなものを一度処理しなければなりませんでした。それはパーサーがそれのようなもののために死ぬことは可能ですか?しかし、エラーメッセージはそれに収まらないようです。 – Simons0n

+0

RESTメソッドのシグネチャとサンプルの応答文書を投稿できますか?データ全体を含める必要はなく、エンドポイントがJSON文書をどのように送信しているかをもう少し詳しく知りたいだけです。 (HTTP経由でコンテンツ長を設定する?) –

+0

@ Simons0n十分なメモリがあるようです。私は、エンドポイントを呼び出す前、途中、そして終了後に利用可能なメモリをチェックしましたが、多くの変更はありません。おかげで – AntonioOtero

答えて

0

ミステリー解消!または種類...

それはインフラストラクチャの問題であることが判明しました。私たちはTierpointを使用してサーバーをホストしていますが、2MB以上の応答を許可していないファイアウォール設定がありました。少なくとも、それは私が問題をエスカレートしたときにITの人が私に説明した方法です。

ご協力いただきありがとうございます。少なくともJSONで解析されるデータの量には制限がないことを確認できました。

関連する問題