2016-11-12 20 views
0

私はAWS LambdaをJava 8の関数で使用しています。ラムダには組み込みのJacksonシリアライザがあります。メソッドがオブジェクトを返すと、オブジェクトはJSON表現にシリアル化されます。Jackson JsonNodeシリアル化

私は次のプロパティで構成されていonject:私は簡単にするために、クラスのすべての残りの部分を省略しましたが、それはゲッター/セッターなど

を持って

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 
     } 
    } 
} 

は、しかし、いくつかの未知の理由で、私はラムダでこれを実行して、実際の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 * ? *" 
} 

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

UPDATE:

modelfieldは動的であり、実行時に提供されているので、私は特にJsonNodeを使用しています。だから私は前もって構造を知っていません。

答えて

0

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

private String name; 
private Map<String, Object> model; 
private Map<String, Object> field; 
+0

私はできません!オブジェクトが動的なので、私は特にJsonNodeを使用しています。 – tarka

+0

あなたの質問に言及する必要があります。 – rmlan

+0

問題は、 'Object'がJSON文字列としてシステムに到着し、javaオブジェクトに変換されなければならないことです。だから私が 'Object'として定義したとしても、まだ' JsonNode'です。 – tarka

関連する問題