Java 21 Sqs Sulderer не может анализировать пользовательский объект, отправленный как сообщениеJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Java 21 Sqs Sulderer не может анализировать пользовательский объект, отправленный как сообщение

Сообщение Anonymous »

Я обновляю систему на основе микросервисов от Java 17 до Java 21, работая на Spring Boot 3 и Spring Framework 6. Мое приложение отправляет пользовательский объект (событие) в очередь AWS SQS, но мое слушатель сообщений ожидает строки. Это хорошо сработало в Java 17, но после обновления мой слушатель не может обработать сообщение из -за проблемы с подбором JSON.

Код: Выделить всё

Caused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'no': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 3]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2572)
at com.fasterxml.jackson.core.JsonParser._constructReadException(JsonParser.java:2598)
at com.fasterxml.jackson.core.JsonParser._constructReadException(JsonParser.java:2606)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:765)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:3018)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:2996)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._matchToken(ReaderBasedJsonParser.java:2761)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._matchNull(ReaderBasedJsonParser.java:2747)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:750)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4992)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4898)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3848)
at org.springframework.messaging.converter.MappingJackson2MessageConverter.convertFromInternal(MappingJackson2MessageConverter.java:251)
... 27 common frames omitted
< /code>
После отладки я обнаружил, что payload.tostring () внутри картирования Jackson2messageConverter возвращает что -то вроде: < /p>
no.com.common.Event@6f8e5dfd
Вместо представления строки JSON.
Подробности конфигурации
кв.@SqsListener(value = "${sqs.queue.event.in}", acknowledgementMode = SqsListenerAcknowledgementMode.MANUAL)
public void receiveHourEvent(Acknowledgement acknowledgement, String event){
LOG.info("SQSListener triggered");
}
< /code>
@Bean
SqsMessageListenerContainerFactory defaultSqsListenerContainerFactory(SqsAsyncClient sqsAsyncClient,
SqsMessagingMessageConverter sqsMessagingMessageConverter,
SqsReceiverErrorHandler sqsReceiverErrorHandler,
@Value("${sqs.poll.timeout}") Duration pollTimeout,
@Value("${sqs.poll.messagevisibility}") Duration pollMessageVisibility) {
return SqsMessageListenerContainerFactory
.builder()
.configure(options -> options
.maxMessagesPerPoll(10)
.pollTimeout(pollTimeout)
.messageVisibility(pollMessageVisibility)
.messageConverter(sqsMessagingMessageConverter))
.sqsAsyncClient(sqsAsyncClient)
.messageInterceptor(new BreadcrumbMessageInterceptor())
.errorHandler(sqsReceiverErrorHandler)
.build();
}

@Bean
SqsTemplate sqsTemplate(SqsAsyncClient sqsAsyncClient, SqsMessagingMessageConverter sqsMessagingMessageConverter) {
SqsTemplate sqsTemplate = SqsTemplate.builder()
.sqsAsyncClient(sqsAsyncClient)
.messageConverter(sqsMessagingMessageConverter)
.build();
return sqsTemplate;
}

@Bean
public SqsMessagingMessageConverter sqsMessagingMessageConverter(SqsExtendedClient sqsExtendedClient) {
ExtendedSqsMessagingMessageConverter converter = new ExtendedSqsMessagingMessageConverter(sqsExtendedClient);
converter.setObjectMapper(JsonMappers.getObjectMapper());
return converter;
}

< /code>
private static ObjectMapper initializeMapper() {
final ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)
.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE)
.setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE);

mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.registerModule(new JavaTimeModule());
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
mapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true);
mapper.disable(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS);
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);

return mapper;
}

public static T fromJson(String text, Class type) {
try {
return getObjectMapper().readValue(text, type);
} catch (IOException e) {
throw new RuntimeException(e);
}
}

public static String toJson(T value) {
try {
return getObjectMapper().writeValueAsString(value);
} catch (IOException e) {
throw new RuntimeException(e);
}
}

< /code>
Event Object:

public class Event {
String eventName;
Instant dateTime;
}
< /code>
I use sqsTemplate to send it and in my code it looks like this:
sqsTemplate.send(queueName, myEvent);
< /code>
I have verified that toJson(myEvent) properly serializes the object when called manually. I have ensured that sqsMessagingMessageConverter is set correctly in SqsTemplate. After debugging I see that payload.toString() inside MappingJackson2MessageConverter returns an object reference instead of a JSON string.
return this.objectMapper.readValue(payload.toString(), javaType)
< /code>
I am using following dependencies:


com.fasterxml.jackson.datatype
jackson-datatype-jsr310
2.17.2


com.fasterxml.jackson.core
jackson-databind
2.17.2

< /code>
Why is the payload being treated as an object reference instead of a JSON string? Is there something missing in my ObjectMapper configuration, or do I need to adjust how SqsMessagingMessageConverter is handling serialization?

Подробнее здесь: https://stackoverflow.com/questions/795 ... as-message
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • ASP.NET Core Web API Lambda не может обработать запрос, отправленный из очереди SQS
    Anonymous » » в форуме C#
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • ASP.NET Core Web API Lambda не может обработать запрос, отправленный из очереди SQS
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Оптимизируйте это JS Code Come Comement Sulderer для быстрого ответа
    Anonymous » » в форуме Javascript
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Расширение Chrome - Закладка Onclick Event Sulderer
    Anonymous » » в форуме Jquery
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Как работает Spring Kafka Parting Sulderer?
    Гость » » в форуме JAVA
    0 Ответы
    3 Просмотры
    Последнее сообщение Гость

Вернуться в «JAVA»