Работая с 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
достаточно легко десериализовать - они будут всегда быть одним 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?
}