Пользовательский ObjectMapper с Spring RestClient (переход с WebClient)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Пользовательский ObjectMapper с Spring RestClient (переход с WebClient)

Сообщение Anonymous »

В настоящее время используется Spring Boot 3.1 с реактивным веб-клиентом, настроенным следующим образом:

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

@Configuration
public class MyConfig {

@Bean
WebClient webClient() {
ExchangeStrategies strategies = ExchangeStrategies.builder().codecs(clientCodecConfigurer ->
{
ObjectMapper objectMapper = createObjectMapper();
Jackson2JsonDecoder decoder = new Jackson2JsonDecoder(objectMapper);
decoder.setMaxInMemorySize(10_000_000);
clientCodecConfigurer.customCodecs().register(decoder);
clientCodecConfigurer.customCodecs().register(new Jackson2JsonEncoder(objectMapper));
}
).build();

return WebClient.builder()
.exchangeStrategies(strategies)
.baseUrl(this.properties.baseUrl())
.build();
}

@Bean
public HttpServiceProxyFactory httpServiceProxyFactory(
WebClient webClient) {
return HttpServiceProxyFactory
.builder(WebClientAdapter.forClient(webClient))
.build();
}

@Bean
public MyRemoteServiceApi myGateway(HttpServiceProxyFactory httpServiceProxyFactory) {
return httpServiceProxyFactory.create(MyRemoteServiceApi.class);
}

private static ObjectMapper createObjectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.KEBAB_CASE);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
mapper.setSerializationInclusion(Include.NON_NULL);
mapper.registerModule(new JavaTimeModule());
return mapper;
}
}
Я использую две настройки:
  • Пользовательский Jackson ObjectMapper, поскольку приложение, которое я вызываю через веб-клиент, использует кебаб. -случай. API, предоставляемый моим собственным приложением, использует обычный pascalCase.
  • Увеличьте максимальный размер памяти, который Jackson2JsonDecoder может использовать для считывания ответов.
Как мне перенести этот код для использования RestClient Spring Boot 3.2?
Для пользовательского преобразователя объектов я сделал следующее:

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

@Bean
public RestClient restClient() {
return RestClient.builder()
.messageConverters(httpMessageConverters -> {
httpMessageConverters.clear();
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(createObjectMapper());
httpMessageConverters.add(converter);
})
.baseUrl(this.properties.baseUrl())
.build();
}
Кажется, это работает, но мне кажется странным, что мне нужно сначала очистить список. Действительно ли это так и должно быть?
Второй вопрос: как мне установить maxInMemorySize? Или для RestClient это не требуется?

Подробнее здесь: https://stackoverflow.com/questions/778 ... -webclient
Ответить

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

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

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

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

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