我将使用Java 8函数和AWS Lambda。Lambda内置了Jackson序列化程序,因此当您的方法返回对象时,它会将其序列化为JSON表示形式。
我有一个由以下属性组成的对象:
然而,由于某种不明原因,当我在Lambda中运行此代码时,实际的JsonNode对象本身(而非树状结构,而是包装器对象)被序列化。因此,我得到了这个结果:
我有一个由以下属性组成的对象:
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 * ? *"
}
有谁能解释一下这到底是怎么回事,并提供任何解决方案/解决方法的建议吗?
更新:
我特别使用JsonNode,因为模型和字段是动态的,且在运行时提供。因此我不知道结构。
Map
内部的Object
是一个JsonNode
,最终会遇到相同的问题。唯一的区别是它现在被包装在一个Map
中。 - tarkamodel
和field
的Type
。它们都需要是JsonNode
。 - tarkacom.fasterxml.jackson.databind.JsonNode
进行反序列化,但我们又用org.codehaus.jackson.JsonNode
进行序列化。请问您能否帮我解决这个问题? - Evilguy