Spring AWS SQS - MessageConversionException - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь решить проблему сериализации с SQS Queue, вот код:

@Configuration
public class QueueConfig {

    @Bean
    public QueueMessagingTemplate messagingTemplate(AmazonSQSAsync amazonSqs, ResourceIdResolver resourceIdResolver) {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.findAndRegisterModules();

        DefaultContentTypeResolver resolver = new DefaultContentTypeResolver();
        resolver.setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON);

        MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
        converter.setSerializedPayloadClass(String.class);
        converter.setObjectMapper(objectMapper);
        return new QueueMessagingTemplate(amazonSqs, resourceIdResolver, converter);
    }
}

Это работает (строка):

public void publish(String queue, String value) {
    messagingTemplate.convertAndSend(queue, value);
}

Это не работает (объект ):

public void publish(String queue, Something something) {
    messagingTemplate.convertAndSend(queue, something);
}

Я получаю сообщение об ошибке:

org.springframework.messaging.converter.MessageConversionException: Unable to convert payload with type='com.example.Something', contentType='null', converter=[CompositeMessageConverter[converters=[org.springframework.messaging.converter.StringMessageConverter@433f5e00, org.springframework.messaging.converter.MappingJackson2MessageConverter@74e3e86e]]]

Что я делаю не так?

1 Ответ

0 голосов
/ 28 марта 2020

Что я подозреваю, этот кусок кода

converter.setSerializedPayloadClass(String.class);

Просто попробуйте сделать это скорее

    MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
    return new QueueMessagingTemplate(amazonSqs, resourceIdResolver, converter);

Это преобразует тело запроса в байт [] перед публикацией сообщения в очереди.

...