java - 嵌套对象的 Java Jackson 反序列化
问题描述
使用 AWS Lambda,当一个因异常而失败时,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
String
String
List<String>
我被困的地方是cause
田野。如果没有原因,这可能是一个空对象,或者一个嵌套异常,或者两个,或者一百个......
我如何反序列化这个?到目前为止,这是我的 POJO。
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ExceptionRep {
String errorMessage;
String errorType;
List<String> stackTrace;
// how do I do the cause field?
}
解决方案
如果您不想在自定义类中定义所有属性,则可以使用 HashMap。
推荐阅读
- reactjs - 在 react 中同时更新 redux 状态
- javascript - 如果计数器的值为 0,如何隐藏我的徽章?
- sql - 无法打开物理文件。操作系统错误 5:“5(拒绝访问。)”
- javascript - ReactJS如何在成功时显示一个常量函数?
- amazon-web-services - ECS 通过容量提供程序扩展到 ASG 的最小容量
- sql - SQL 查询效率 - 使用左外连接 VS 嵌套选择语句
- r - R:有条件地将数据从一个数据帧提取到另一个数据帧
- node.js - 成功回调后我应该关闭oracle连接吗?
- python - 如何拟合 Keras 模型关于火车形状的误差?
- php - MySql可以在一张表中设置一个主键的两个外键吗?