【问题标题】:Json not converting to object in spring integrationJson没有在spring集成中转换为对象
【发布时间】:2017-05-31 19:23:01
【问题描述】:

我有

.transform(Transformers.fromJson(SNSMessage.class))

不返回从我的 JSON 转换而来的值。 JSON 输入是

{
    "Type": "Notification",
    "MessageId": "b5c64f3f-59e3-5fce-9ad6-1e98973c9537",
    "TopicArn": "arn:aws:sns:us-east-1:194477963434:local-hera-update",
    "Subject": "com.accuity.hera.model.HeraNotification",
    "Message": "{\"id\":\"65e60559-cab5-4027-88a2-46185fbd50b9\",\"resourceType\":\"listItem\",\"action\":\"I\",\"timeOfAction\":\"2017-05-30T19:48:46Z\",\"source\":\"gwl\"}",
    "Timestamp": "2017-05-30T19:48:47.593Z",
    "SignatureVersion": "1",
    "Signature": "Xz0qg0byLMA1fwIRbi7aWcEzhtcLBOmzyUluL1W5URu4WaiEO3G\/+hPSpsFXGxcSYNYRgpKhL9QAP2qLkuMlSEMqiEOHaSr88UaB8QRV2lUEjdBAWpuFYVBPdb+jpo6n3m89vVHoYfFWk8yBkc0zuoRl4OYcUXfTZiWWQkkrT8r9OzWU8LxQwgf0jgr1xEoqbl7uMHIp7nHp3cKstQ0mbK6yxMQ8faxfDm+IwH3k8BBH2\/CXmRg9WME6JK77jvagMUHNhUahWKIjm4iz+TCQCdnmHQR21hmgxlkhdrSxZ1FBbk6BjxfX7gorEwwfY1gYNoZCXxsN63+4vSiFMlOAAQ==",
    "SigningCertURL": "https:\/\/sns.us-east-1.amazonaws.com\/SimpleNotificationService-b95095beb82e8f6a046b3aafc7f4149a.pem",
    "UnsubscribeURL": "https:\/\/sns.us-east-1.amazonaws.com\/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:194477963434:local-hera-update:7de3da56-9e6c-43ca-9abc-d46fff379380"
}

类定义是:

public class SNSMessage {
    private String Type;
    private String MessageId;
    private String TopicArn;
    private String Subject;
    private String Message;
    private String Timestamp;
    private String SignatureVersion;
    private String Signature;
    private String SigningCertURL;
    private String UnsubscribeURL;
}

知道为什么 SNSMessage 会返回所有字段都设置为 null 吗?

【问题讨论】:

  • 不能用jackson的ObjectMapper吗?
  • Federico Piazza--jackson的ObjectMapper是底层实现,
  • Ivan Pronin--没有回溯发生,也不是你提到的问题中复杂结构的问题。
  • @DonHosek,那你不能ObjectMapper mapper = new ObjectMapper(); mapper.readValue(json, SNSMessage .class); 吗?

标签: java json spring-integration amazon-sns


【解决方案1】:

您遇到的问题是您的 json 属性使用的大写字母与您的 pojo 属性不同。

这意味着您已将 Type 作为 json 属性并为您的 getter 检测到 type

你需要像这样使用@JsonProperty注解:

@JsonProperty("Type") 
private String type;
...
// getters / setters for type

顺便说一句,如果您不想遵循 java 命名标准并且拥有 Type 以及 pojo 属性,那么只需将 @JsonProperty 添加到不带参数的属性中

【讨论】:

    猜你喜欢
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 2020-09-29
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    相关资源
    最近更新 更多