2016-11-12 227 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