1

Java 8 関数でAWS Lambdaを使用しています。Lambda には Jackson Serializer が組み込まれているため、メソッドがオブジェクトを返すと、JSON 表現にシリアル化されます。

次のプロパティで構成されるオブジェクトがあります。

private String name;
private JsonNode model;
private JsonNode field;

簡単にするために、クラスの残りの部分はすべて省略しましたが、ゲッター/セッターなどがあります。

通常、これをネイティブ アプリケーションで実行すると、完全に機能します。ツリー構造はJsonNodeJSON としてレンダリングされます。例えば:

{
    "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 * ? *"
}

なぜこれが起こっているのか、解決策/回避策についての提案はありますか?

アップデート:

modelfieldは動的で実行時に提供されるため、特に JsonNode を使用しています。そのため、事前に構造を知ることはありません。

4

1 に答える 1

0

「モデル」と「フィールド」が常に配列ではなくオブジェクトである場合、Map<String, Object>それらに a を使用できます。子オブジェクトの場合は、他のマップを値として追加するだけです。

private String name;
private Map<String, Object> model;
private Map<String, Object> field;
于 2016-11-12T15:11:05.830 に答える