Support `ClientHttpMessageConvertersCustomizer` in `FeignHttpMessageConverters` for Spring Boot 4.0 Alignment
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 65/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- java, spring, spring-boot
Direzione di ricerca
Inizia da FeignHttpMessageConverters.java, in particolare dal costruttore e da initConvertersIfRequired(), e verifica in cosa ClientHttpMessageConvertersCustomizer differisce dall'esistente Feign HttpMessageConverterCustomizer. Segui il flusso e l'ordine di ClientBuilder prima di decidere dove devono essere collocati i client customizers. Il lavoro è completato quando i client customizers di Spring Boot 4 influiscono sui converter Feign senza compromettere il comportamento esistente dei converter e dei Feign-customizer.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Is your feature request related to a problem? Please describe.
With the architectural changes in Spring Boot 4.0 (as detailed in spring-projects/spring-boot#48310), the configuration of HTTP Message Converters has shifted from collecting all HttpMessageConverter beans from the context to using dedicated customizers (ClientHttpMessageConvertersCustomizer for clients and ServerHttpMessageConvertersCustomizer for servers).
Currently, FeignHttpMessageConverters in Spring Cloud OpenFeign constructs the converter list by collecting raw HttpMessageConverter<?> beans from the ObjectProvider and applying its own Feign-specific org.springframework.cloud.openfeign.support.HttpMessageConverterCustomizer.
This creates an inconsistency in the ecosystem. If I configure a converter using the standard Spring Boot 4.0 ClientHttpMessageConvertersCustomizer (intended for RestClient and RestTemplate), OpenFeign ignores it. I am forced to either:
- Define the converter as a raw
@Bean(which Spring Boot 4.0 discourages for auto-configuration context pollution). - Duplicate the configuration using the Feign-specific
HttpMessageConverterCustomizer.
Describe the solution you'd like
FeignHttpMessageConverters should detect and apply ClientHttpMessageConvertersCustomizer beans from the application context. This would allow a single point of configuration for all HTTP clients (Feign, RestClient, and RestTemplate) in a Spring Boot 4.0 application.
In FeignHttpMessageConverters.java, specifically within the initConvertersIfRequired() method, the logic builds an HttpMessageConverters instance using HttpMessageConverters.ClientBuilder. Since ClientHttpMessageConvertersCustomizer is designed to customize HttpMessageConverters, it seems natural to apply these customizers there.
Proposed logic change conceptually:
public class FeignHttpMessageConverters {
// Inject ClientHttpMessageConvertersCustomizer provider
private final ObjectProvider<ClientHttpMessageConvertersCustomizer> clientCustomizers;
// ... constructor ...
private void initConvertersIfRequired() {
if (this.converters == null) {
// ... existing builder logic ...
HttpMessageConverters hmc = builder.build();
// PROPOSED CHANGE: Apply Spring Boot Client Customizers
if (this.clientCustomizers != null) {
this.clientCustomizers.orderedStream().forEach(customizer -> customizer.customize(hmc));
}
// Continue with existing logic
hmc.forEach(converter -> converters.add(converter));
customizers.forEach(customizer -> customizer.accept(this.converters));
}
}
}
Describe alternatives you've considered
- Current Workaround: Defining a separate
@Beanfororg.springframework.cloud.openfeign.support.HttpMessageConverterCustomizerthat duplicates the logic present in myClientHttpMessageConvertersCustomizer. - Global Bean: Defining the converter as a global
@Beanmarked with@Primary. However, as mentioned in the linked Spring Boot issue, relying on collecting beans from the context is being revisited and might not be the preferred way forward for separate client/server configurations.
Additional context
References:
- Spring Boot Issue: Revisit HttpMessageConverters auto-configuration #48310
- Current implementation of
FeignHttpMessageConvertersrelies on:
It misses thepublic FeignHttpMessageConverters(ObjectProvider<HttpMessageConverter<?>> messageConverters, ObjectProvider<HttpMessageConverterCustomizer> customizers) { this.messageConverters = messageConverters; this.customizers = customizers; }ClientHttpMessageConvertersCustomizerwhich is now the standard for client-side configuration in Boot 4.
- Lingua principale
- Java
- Stelle
- 1.3k
- Fork
- 835
- Merge medio
- 19h 49m
- PR unite (30g)
- 24
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di spring-cloud/spring-cloud-openfeign
-
question
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
spring-cloud/spring-cloud-openfeign#1392 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
FeignClientsConfiguration$MicrometerConfiguration.class cannot be opened because it does not existApertafeedback-provided
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
spring-cloud/spring-cloud-openfeign#1379 · 5 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
waiting-for-triage
Difficoltà 3/5 1-2 giorni Idoneità per principianti 57/100
spring-cloud/spring-cloud-openfeign#1344 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
waiting-for-triage
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
spring-cloud/spring-cloud-openfeign#1343 ·
I maintainer di solito rispondono entro 1 giorno
-
waiting-for-triage
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
spring-cloud/spring-cloud-openfeign#1340 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di spring-cloud/spring-cloud-openfeign
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 61/100
Vakore/ZappierGames#162 ·
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
[Bug] Lock owned by another client (e.g. Text app) cannot be unlocked from the appForse già presa @falkloewert l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
bug grammar sev-0
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 86/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100