私のjson文字列は次のとおりです。
{
"sigTemplateId": 1,
"name": "Test Ticket Template",
"groups": "[{\"sigTemplateId\": 1, \"sigTemplateGroupId\": 1, \"name\": \"Group 1\", \"ordinal\": 1}]"
}
これは私のjspからサーブレットに送信されます。サーブレットコードは次のとおりです。
Gson gson = new Gson();
if (jsonData != null) {
Type objType = new TypeToken<SigTemplateObj>() {}.getType();
SigTemplateObj sigTemplateToSave = gson.fromJson(jsonData, objType);
//SigTemplateObj sigTemplateToSave = gson.fromJson(jsonData, SigTemplateObj.class);
}
java.lang.IllegalStateException:これはJSON配列ではありません。gsonがグループ配列を解析しようとしています:JsonDeserializer com.google.gson.DefaultTypeAdapters $ CollectionTypeAdapter@1f4db697がjsonオブジェクトの逆シリアル化に失敗しました"[{\"sigTemplateId \ ":1、\" sigTemplateGroupId \ ":1、\" name \ " :\ "Group 1 \"、\ "ordinal \":1}]"タイプjava.util.ArrayList
私のオブジェクトコードは次のとおりです。
public class SigTemplateObj {
int sigTemplateId;
String dyninkName;
int dyninkFormId;
String name;
//children collections
ArrayList<SigTemplateFieldObj> fields;
ArrayList<SigTemplateGroupObj> groups;
...
}
public class SigTemplateGroupObj {
int sigTemplateGroupId;
int sigTemplateId;
int ordinal;
String name;
...
}
上記のコードとこの行の両方を試しましたが、どちらも同じ結果になりました。
SigTemplateObj sigTemplateToSave = gson.fromJson(jsonData, SigTemplateObj.class);
どんな助けでもいただければ幸いです。ありがとう、エリック
ここで、JavaScriptを修正して、グループ配列を文字列ではなく配列として扱う必要があります。
var testObject = new Object();
testObject.sigTemplateId = 1;
testObject.name = 'Test Ticket Template';
testObject['groups'] = [];
var testGroup = new Object();
testGroup.sigTemplateId = 1;
testGroup.sigTemplateGroupId = 1;
testGroup.name = 'Group 1';
testGroup.ordinal = 1;
testObject.groups.push(testGroup);
var json = JSON.stringify(testObject);