2016-11-12 98 views
0

我正在使用帶有Java 8功能的AWS Lambda。 Lambda有一個內置的Jackson Serializer,所以當你的方法返回一個對象時,它將它序列化爲一個JSON表示。Jackson JsonNode序列化

我有一個是由以下性質的onject:

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

我省略類的所有其餘爲簡單,但它有getter/setter方法等

通常,當我在我的本地應用程序中運行它時,它可以很好地工作。 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 * ? *" 
} 

沒有任何人有任何見解,爲什麼發生這種情況和解決方案/解決方法有什麼建議?

UPDATE:我專門用一JsonNode因爲modelfield是動態的,在運行時提供

。所以我不會提前知道結構。

回答

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