Я пытаюсь взаимодействовать с другой системой, которая имеет чрезвычайно определенные c параметры интеграции. У них нет какого-либо кода, написанного для игнорирования чувствительности к регистру, и, короче говоря, для пост-запроса, который я пытаюсь сделать, они ожидают тело JSON с именами полей в Pascal случае вместо Camel Case и запрос не выполняется без Pascal. Мы используем WebClient для отправки вызовов интеграции, чтобы мы могли поддерживать реактивные потоки в нашем коде. Насколько я могу сказать, когда я использую WebClient для сериализации в JSON, запрос преобразуется в использование Camel Case, чего я обычно хотел бы.
Как я могу сериализовать это для Pascal вместо? Все, что я пытаюсь исследовать, приводит к тому, что я попадаю на NET землю, но я не пишу это в C#. Я пишу это в Java.
//For example:
{"originTypeCode":"US","camelCaseFieldName":"FAILED"} // FAILURE
{"OriginTypeCode":"US","PascalFieldName":"SUCCESS"} // SUCCESS
У меня есть две идеи:
1) Это кажется менее идеальным, но, возможно, более интуитивным. Идея состоит в том, чтобы сначала преобразовать объект, который я пытаюсь опубликовать, в JSON, затем с помощью парсера преобразовать все поля из Camel Case в Pascal, а затем попытаться опубликовать его с помощью моего метода WebClient. Это не самый идеальный способ сделать это. Я мог бы предположить, что, возможно, есть что-то намного чище.
2) Вторая идея заключается в том, что мой экземпляр WebClient сериализуется с использованием сериализатора Джексона. Я думаю, что если бы мне пришлось создать новый Bean-компонент WebClient / Jackson ObjectMapper, возможно, я мог бы написать собственный конвертер для использования специально для этого потока интеграции. Кажется, что это, возможно, чище, но копаясь в WebClient и его методах сборки, трудно понять, как это сделать sh. Ниже я публикую бобы, как они у меня определены. Копаться в такого рода вещах довольно ново для меня, поэтому я не уверен, что нужно изменить или где. Компонент WebClient из класса WebClientConfig, а объект ObjectMapper из моего класса JacksonConfig.
@Bean
public WebClient webClient() {
return WebClient.builder().clientConnector(getClientHttpConnector()).build();
}
@Bean
@Primary
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
return objectMapper;
}
Я также открыт для других предложений.