繁体   English   中英

JSON到Java对象的解析

[英]JSON to Java Object parsing

我正在从AWS SQS接收以下提到的JSON字符串作为响应。 当我尝试对此进行解析并使用Jackson readValue()将其序列化/反序列化为Java对象时,我将该对象获取为null

RootObject [type=null, messageId=null, topicArn=null, message=null, timestamp=null, signatureVersion=null, signature=null, signingCertURL=null, unsubscribeURL=null]

我正在使用的代码是这样的:

ObjectMapper objectMapper = new ObjectMapper();
RootObject rootObj = objectMapper.readValue(jsonString, RootObject.class);

JSON字符串:

{
  "Type" : "Notification",
  "MessageId" : "5d8da694-f227-55d7-9c99-f76b4344e0cf",
  "TopicArn" : "arn:aws:sns:us-east-1:301793434032:MyTestTopic",
  "Message" : "{\"notificationType\":\"Delivery\",\"mail\":{\"timestamp\":\"2017-08-05T06:06:53.319Z\",\"source\":\"sunnydiatm@gmail.com\",\"sourceArn\":\"arn:aws:ses:us-east-1:501790854032:identity/sunnydiatm@gmail.com\",\"sourceIp\":\"103.68.178.205\",\"sendingAccountId\":\"400920854032\",\"messageId\":\"0100015db345e987-e0bad5bc-0494-4f7d-bd07-7915281d67b2-000000\",\"destination\":[\"sunnydir@gmail.com\"]},\"delivery\":{\"timestamp\":\"2017-08-05T06:06:59.411Z\",\"processingTimeMillis\":6092,\"recipients\":[\"sunnydier@gmail.com\"],\"smtpResponse\":\"250 2.0.0 OK 1501913219 i194si2321639qki.188 - gsmtp\",\"remoteMtaIp\":\"2.85.232.26\",\"reportingMTA\":\"a8-96.smtp-out.amazonses.com\"}}",
  "Timestamp" : "2017-08-05T06:06:59.465Z",
  "SignatureVersion" : "1",
  "Signature" : "XBQ/sIr23r23tEOzSkNX+0h9lD/kCXl8Hfu+rIlhIS3DIuc4545tkzA+YPYwruJtRR+tLvIZkfyTmL5f4W6eghaXOb8XsugeNFkHkpF52zEuttOi3YUTv8RJmXHnWYhOSK7s9RUNpsrY8toQJyY+r1aNZPnVg8MwJBmJzb5RMssdwHYhSvDCmqH2gKsouufAVFnnSz0md1dKgaEg8kv1h8Fs3Qs7hnbsgaeWStQV0XB8unrJ0mAlIaAqaULuwlSgP8c8PpogLF6lZrDm5LcmDvVJrmwxGpS8uQ3l0pDOeYd/tyRTfsRpc3bZuImH2/9uxX1KmT+wP+X/9NdOz34TQyA==",
  "SigningCertURL" : "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-b95095beb82e8fasdf46b3aafc7f4149a.pem",
  "UnsubscribeURL" : "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:401792344032:MyTestTopic:c10afa38-f9f8-4a03-86b3-2e83565b5f12"
}

我的父母班级如下:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class RootObject
{
  private String type;
  private String messageId;
  private String topicArn;
  private Message message;
  private Date timestamp;
  private String signatureVersion;
  private String signature;
  private String signingCertURL;
  private String unsubscribeURL;

  //getter & setters

}

我的Message类包含以下变量:

public class Message
{
  private Mail mail;  
  private Bounce bounce;
  private String notificationType;

  //getter & setters

}

关联的类也会生成并保存在类路径中。

我需要将JSON字符串转换为Java对象,以便可以对此执行操作。

使用以下依赖项:

compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'

并在有问题的情况下查看此代码,即可正常运行Android-Retrofit2-java.security.cert.CertPathValidatorException:找不到证书路径的信任锚

要将JSON转换为Java Model类,请使用以下网址http : //www.jsonschema2pojo.org/

而不是POJO类编写以下代码:

MyObject.java:

public class MyObject {

    @SerializedName("Type")
    @Expose
    private String type;
    @SerializedName("MessageId")
    @Expose
    private String messageId;
    @SerializedName("TopicArn")
    @Expose
    private String topicArn;
    @SerializedName("Message")
    @Expose
    private String message;
    @SerializedName("Timestamp")
    @Expose
    private String timestamp;
    @SerializedName("SignatureVersion")
    @Expose
    private String signatureVersion;
    @SerializedName("Signature")
    @Expose
    private String signature;
    @SerializedName("SigningCertURL")
    @Expose
    private String signingCertURL;
    @SerializedName("UnsubscribeURL")
    @Expose
    private String unsubscribeURL;

    public String getType() {
            return type;
    }

    public void setType(String type) {
            this.type = type;
    }

    public String getMessageId() {
            return messageId;
    }

    public void setMessageId(String messageId) {
            this.messageId = messageId;
    }

    public String getTopicArn() {
            return topicArn;
    }

    public void setTopicArn(String topicArn) {
            this.topicArn = topicArn;
    }

    public String getMessage() {
            return message;
    }

    public void setMessage(String message) {
            this.message = message;
    }

    public String getTimestamp() {
            return timestamp;
    }

    public void setTimestamp(String timestamp) {
            this.timestamp = timestamp;
    }

    public String getSignatureVersion() {
            return signatureVersion;
    }

    public void setSignatureVersion(String signatureVersion) {
            this.signatureVersion = signatureVersion;
    }

    public String getSignature() {
            return signature;
    }

    public void setSignature(String signature) {
            this.signature = signature;
    }

    public String getSigningCertURL() {
            return signingCertURL;
    }

    public void setSigningCertURL(String signingCertURL) {
            this.signingCertURL = signingCertURL;
    }

    public String getUnsubscribeURL() {
            return unsubscribeURL;
    }

    public void setUnsubscribeURL(String unsubscribeURL) {
            this.unsubscribeURL = unsubscribeURL;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM