'Spring Cloud SQS listener receives empty POJO
I use Spring Cloud: spring-cloud-aws-messaging to implement SNS + SQS. I have SQS listener:
@Transactional
@SqsListener(value = "${sqs.queue.name}", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
public void processMessage(UserEvent userEvent) {
try {
System.out.println(userEvent);
} catch (Exception e) {
LOG.error(e);
}
}
with configuration
@Bean
public QueueMessagingTemplate queueMessagingTemplate(AmazonSQSAsync amazonSQSAsync) {
return new QueueMessagingTemplate(amazonSQSAsync);
}
@Bean
public QueueMessageHandlerFactory queueMessageHandlerFactory(
final ObjectMapper mapper, final AmazonSQSAsync amazonSQSAsync){
final QueueMessageHandlerFactory queueHandlerFactory =
new QueueMessageHandlerFactory();
queueHandlerFactory.setAmazonSqs(amazonSQSAsync);
queueHandlerFactory.setArgumentResolvers(Collections.singletonList(
new PayloadMethodArgumentResolver(jackson2MessageConverter(mapper))
));
return queueHandlerFactory;
}
private MessageConverter jackson2MessageConverter(final ObjectMapper mapper){
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setObjectMapper(mapper);
return converter;
}
UserEvent is a POJO with setters/getters and default constructor. The issue is that SQS listener receives empty object. I suspect that QueueMessageHandlerFactory has wrong configuration. If I change SQS listener argument to String I receive message:
{
"UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:111111111111:topic-name:6ea68f67-306c-4385-858b-laskdjfsd123",
"SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-1ff5318643ec183fbaddaa2a969abadf.pem",
"Signature" : "Ikjay6NCGmwhyNothdvNVWNps1OMOcBuCGT+trYqVzdSLX79cCBgZeX5ZynTlC+ewsRYFH2bVW521pK88j+Z3/uDxGBrMkd6SZ/GBF1Rnl5pB4UG4aZXLP3uxE0MDX+lUPX2aCu6ta/ii3gI7vxtqKoUzqTt8aNHVMT5GG9xjLg2yIxW97MKRLbSHug5NXetlSwYdNuwq/P85Eur6BkufpLg5aummfAwfpR9ZaNdFEqjBl0nYj96q46w6UKFHaZDEgeit1TMBYjCKM3VzuyMSOPQ==",
"SignatureVersion" : "1",
"Timestamp" : "2022-03-03T14:44:49.000Z",
"Message" : "{\"id\":\"1\",\"name\":\"Alex\"}",
"TopicArn" : "arn:aws:sns:us-west-2:111111111111:topic-name",
"MessageId" : "c765b712-d774-558a-a070-ed8801d5e34r",
"Type" : "Notification"
}
Please let me know what I do wrong.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
