使用 GSON 解析整个 AWS SQS 记录

Parsing Entire AWS SQS Record using GSON

我一直在尝试解析这条消息,但没有成功。使用 AWS 简单队列服务 API,我按照说明进行了以下操作...

for(Message m : Messages){
    System.out.println(m.getBody());
}

这个returns这个结构中的一个JSON字符串:

{
    "Records": [
        {
            "EventSource": "",
            "EventVersion": "",
            "EventSubscriptionArn": "",
            "Sns": {
                "Type": "",
                "MessageId": "",
                "TopicArn": "",
                "Subject": null,
                "Message": ""                
                "Timestamp": "",
                "SignatureVersion": "",
                "Signature": "”
                "SigningCertUrl": "",
                "UnsubscribeUrl": "",
                "MessageAttributes": {}
            }
        }
    ]
}

我一直在尝试使用 GSON 将整个内容解析为 Java 对象,以便我可以提取 "Message" 参数(其中还包含 JSON),然后使用 GSON解析它(当我直接传递该文本时完成并工作)。

这些是我设置的 类,但这不起作用 -- 每个都有 public getter 和 setter.....

记录 Class:

public class Records {

    public ArrayList<ExceptionMessages> exceptionMessages = new ArrayList<ExceptionMessages>();

    public ArrayList<ExceptionMessages> getExceptionMessages() {
        return exceptionMessages;
    }

    public void setExceptionMessages(ArrayList<ExceptionMessages> exceptionMessages) {
        this.exceptionMessages = exceptionMessages;
    }

留言Class:

public class ExceptionMessages {

    public String EventSource;
    public String EventVersion;
    public String EventSubscriptionArn;
    public Sns messageJSON;     
}

Sns Class(消息存储位置):

public class Sns {

    public String Type;
    public String MessageId;
    public String TopicArn;
    public String Subject;
    public String Message;
    public String Timestamp;
    public String SignatureVersion;
    public String Signature;
    public String SigningCertUrl;
    public String UnsubscribeUrl;
    public String MessageAttributes;
}

我在尝试 .get(0) ArrayList 时遇到空指针异常,因此它是空的并且没有进行解析。

我是这样称呼它的……

我正在将 m.getBody() 发送到解析方法并尝试像这样解析:

Gson gson = new Gson();
Records record = new Records();
gson.fromJson(JSONString.replaceAll("\s+", ""), Records.class);

结构应该是

class RecordContainer {
    ArrayList<Record> Records;
}

class Record {
    public String EventSource;
    public String EventVersion;
    public String EventSubscriptionArn;
    public Sns Sns;     
}

class Sns {
    public String Type;
    public String MessageId;
    public String TopicArn;
    public String Subject;
    public String Message;
    public String Timestamp;
    public String SignatureVersion;
    public String Signature;
    public String SigningCertUrl;
    public String UnsubscribeUrl;
    public MessageAttributes MessageAttributes;
}