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です。
私はリストサイズのメモリには限界があることを知っています。私はそのようなものを一度処理しなければなりませんでした。それはパーサーがそれのようなもののために死ぬことは可能ですか?しかし、エラーメッセージはそれに収まらないようです。 – Simons0n
RESTメソッドのシグネチャとサンプルの応答文書を投稿できますか?データ全体を含める必要はなく、エンドポイントがJSON文書をどのように送信しているかをもう少し詳しく知りたいだけです。 (HTTP経由でコンテンツ長を設定する?) –
@ Simons0n十分なメモリがあるようです。私は、エンドポイントを呼び出す前、途中、そして終了後に利用可能なメモリをチェックしましたが、多くの変更はありません。おかげで – AntonioOtero