SpringBoot: как преобразовать регистр snake в camelCase

#java #spring #spring-boot #spring-cloud-stream

#java #весна #spring-boot #spring-cloud-stream

Вопрос:

Я нахожусь в проекте, где мы используем SpringBoot с Java (1.8 LTS) и Kafka через Spring Cloud Stream. Я получаю событие через облачный поток, который я сохраняю в MongoDB.

Мой StreamListener выглядит так:

 @StreamListener(MessagingChannels.BLA_CHANNEL)
public void onIncomingEvent(
EventContent eventContent,
@Header(name = uuid) UUID messageId
) {
    doStuffWith(eventContent);
}
 

EventContent выглядит так:

 @ToString
@AllArgsConstructor
@Getter
@JsonNaming
public class EventContent {
private final String dataString1;
private final String dataString2;
...
private final Object details;
}
 

Моя проблема в том, что объект details может меняться, у производителя могут быть другие пары ключ / значение.
Некоторые производители отправляют свои данные в snake_case, но я хочу последовательно сохранять их в camelCase.
Так @JsonNaming же как и этот тихий хороший, но, к сожалению, не транзитивный для деталей объект.

Здесь важно быть отказоустойчивым, поэтому, если здесь что-то сломается, это должно быть отправлено в DLQ.

Кто-нибудь знает, как я это делаю? Может быть, есть простой способ с одной аннотацией spring magic, я не знаю — новичок в spring 🙂

Большое спасибо!!

Ответ №1:

Вы должны настроить два разных ObjectMapper: один для Kafka с помощью ObjectMapper.setPropertyNamingStrategy(PropertyNamingStrategy .SNAKE_CASE) и другой для MongoDB без этой опции.