Java 8 関数でAWS Lambdaを使用しています。Lambda には Jackson Serializer が組み込まれているため、メソッドがオブジェクトを返すと、JSON 表現にシリアル化されます。
次のプロパティで構成されるオブジェクトがあります。
private String name;
private JsonNode model;
private JsonNode field;
簡単にするために、クラスの残りの部分はすべて省略しましたが、ゲッター/セッターなどがあります。
通常、これをネイティブ アプリケーションで実行すると、完全に機能します。ツリー構造はJsonNode
JSON としてレンダリングされます。例えば:
{
"name": "example",
"model": {
"key": "ipAddress",
"type": "input",
"templateOptions": {
"label": "IP",
"placeholder": "Something",
"description": "The IP address.",
"required": true
}
},
"field": {
"key": "pro",
"type": "input",
"templateOptions": {
"label": "Pro",
"placeholder": "Something",
"description": "Pro Example",
"required": false
}
}
}
ただし、Lambda でこれを実行すると、不明な理由で、実際の JsonNode オブジェクト自体 (ツリーではなくラッパー オブジェクト) がシリアル化されます。だから私は代わりにこれを取得しています:
{
"name": "example",
"model": {
"nodeType": "NULL",
"array": false,
"null": true,
"valueNode": true,
"containerNode": false,
"missingNode": false,
"object": false,
"pojo": false,
"number": false,
"integralNumber": false,
"floatingPointNumber": false,
"short": false,
"int": false,
"long": false,
"float": false,
"double": false,
"bigDecimal": false,
"bigInteger": false,
"textual": false,
"boolean": false,
"binary": false
},
"fields": {
"nodeType": "ARRAY",
"array": true,
"null": false,
"valueNode": false,
"containerNode": true,
"missingNode": false,
"object": false,
"pojo": false,
"number": false,
"integralNumber": false,
"floatingPointNumber": false,
"short": false,
"int": false,
"long": false,
"float": false,
"double": false,
"bigDecimal": false,
"bigInteger": false,
"textual": false,
"boolean": false,
"binary": false
},
"schedule": "0 0/1 * 1/1 * ? *"
}
なぜこれが起こっているのか、解決策/回避策についての提案はありますか?
アップデート:
model
とfield
は動的で実行時に提供されるため、特に JsonNode を使用しています。そのため、事前に構造を知ることはありません。