嵌套对象的Java Jackson反序列化
使用AWS Lambdas,当一个异常导致失败时,AWS将该异常序列化为JSON,并将其发送回调用该Lambda的任何对象。下面是可能的情况:嵌套对象的Java Jackson反序列化,java,json,jackson,aws-lambda,Java,Json,Jackson,Aws Lambda,使用AWS Lambdas,当一个异常导致失败时,AWS将该异常序列化为JSON,并将其发送回调用该Lambda的任何对象。下面是可能的情况: { "errorMessage":"USER_SERVICE_FAILURE", "errorType":"com.company.project.lambda.core.exceptions.LambdaFailureException", "stackTrace":[ "com.company.p
{
"errorMessage":"USER_SERVICE_FAILURE",
"errorType":"com.company.project.lambda.core.exceptions.LambdaFailureException",
"stackTrace":[
"com.company.project.lambda.worker.MainWorkerLambda.handleRequest(AccountWorker.java:127)",
"sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
"sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
"sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
"java.lang.reflect.Method.invoke(Method.java:498)"
],
"cause":{
"errorMessage":"some other exception error message",
"errorType":"com.company.project.lambda.core.exceptions.SomeOtherException",
"stackTrace":[
"insert other stack trace strings here...",
"...",
"..."
],
"cause":{
"errorMessage": "...",
...continue in to perpetuity...
}
}
}
errorMessage
、errorType
和stackTrace
字段很容易反序列化-它们将始终分别是单个字符串、单个字符串和列表
我被卡住的地方是原因
字段。如果没有原因,这可能是一个空对象,或者一个嵌套异常,或者两个,或者一百个
我如何反序列化这个?这是到目前为止我的POJO
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ExceptionRep {
String errorMessage;
String errorType;
List<String> stackTrace;
// how do I do the cause field?
}
@数据
@诺尔格构装师
@AllArgsConstructor
公共类例外报告{
字符串错误消息;
字符串错误类型;
列表跟踪;
//如何处理“原因”字段?
}
我只需将您的ExceptionRep
类重新用于引用类型,并将对象注释为可选对象(因此,如果JSON中没有原因,则不会导致反序列化失败)
比如:
@JsonProperty(required=false)
ExceptionRep child;
这样,如果存在嵌套的原因,它们将被递归地反序列化。
如果没有,则忽略该属性 将类定义为具有相同类型属性的节点结构:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ExceptionRep {
String errorMessage;
String errorType;
List<String> stackTrace;
private ExceptionRep cause;
}
@数据
@诺尔格构装师
@AllArgsConstructor
公共类例外报告{
字符串错误消息;
字符串错误类型;
列表跟踪;
私人例外代表原因;
}
如果不想定义自定义类中的所有属性,可以使用HashMap