Код: Выделить всё
@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 может использовать для считывания ответов.
Для пользовательского преобразователя объектов я сделал следующее:
Код: Выделить всё
@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
Мобильная версия