Json 未在 spring 集成中转换为对象
Json not converting to object in spring integration
我有
.transform(Transformers.fromJson(SNSMessage.class))
不是 return 从我的 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"
}
而 class 的定义是:
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 返回时所有字段都设置为空吗?
您遇到的问题是您的 json 属性使用的大小写不同于您的 pojo 属性。
这意味着您有 Type
作为 json 属性并且检测到 type
为您的 getter。
您需要像这样使用 @JsonProperty
注释:
@JsonProperty("Type")
private String type;
...
// getters / setters for type
顺便说一句,如果您不想遵循 java 命名标准并拥有 Type
以及 pojo 属性,那么只需添加 @JsonProperty
到 属性 没有 args
我有
.transform(Transformers.fromJson(SNSMessage.class))
不是 return 从我的 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"
}
而 class 的定义是:
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 返回时所有字段都设置为空吗?
您遇到的问题是您的 json 属性使用的大小写不同于您的 pojo 属性。
这意味着您有 Type
作为 json 属性并且检测到 type
为您的 getter。
您需要像这样使用 @JsonProperty
注释:
@JsonProperty("Type")
private String type;
...
// getters / setters for type
顺便说一句,如果您不想遵循 java 命名标准并拥有 Type
以及 pojo 属性,那么只需添加 @JsonProperty
到 属性 没有 args