Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌套对象的Java Jackson反序列化_Java_Json_Jackson_Aws Lambda - Fatal编程技术网

嵌套对象的Java Jackson反序列化

嵌套对象的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

使用AWS Lambdas,当一个异常导致失败时,AWS将该异常序列化为JSON,并将其发送回调用该Lambda的任何对象。下面是可能的情况:

{  
     "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