Support `ClientHttpMessageConvertersCustomizer` in `FeignHttpMessageConverters` for Spring Boot 4.0 Alignment
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 65/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- java, spring, spring-boot
Línea de trabajo
Empieza en FeignHttpMessageConverters.java, especialmente en el constructor y en initConvertersIfRequired(), e inspecciona en qué se diferencia ClientHttpMessageConvertersCustomizer del HttpMessageConverterCustomizer existente de Feign. Sigue el flujo y el orden de ClientBuilder antes de decidir dónde deben ubicarse los client customizers. Se considera terminado cuando los client customizers de Spring Boot 4 afectan a los conversores de Feign sin romper el comportamiento existente de los conversores ni de los Feign-customizers.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Java
- Estrellas
- 1.3k
- Forks
- 835
- Merge medio
- 19 h 49 min
- PR fusionados (30 d)
- 24
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de spring-cloud/spring-cloud-openfeign
-
question
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
spring-cloud/spring-cloud-openfeign#1392 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
FeignClientsConfiguration$MicrometerConfiguration.class cannot be opened because it does not existAbiertofeedback-provided
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
spring-cloud/spring-cloud-openfeign#1379 · 5 comentarios ·
Los mantenedores suelen responder en 1 día
-
waiting-for-triage
Dificultad 3/5 1-2 días Aptitud para principiantes 57/100
spring-cloud/spring-cloud-openfeign#1344 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
waiting-for-triage
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
spring-cloud/spring-cloud-openfeign#1343 ·
Los mantenedores suelen responder en 1 día
-
waiting-for-triage
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
spring-cloud/spring-cloud-openfeign#1340 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de spring-cloud/spring-cloud-openfeign
Issues similares
-
status: needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
JabRef/jabref#17546 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
hiero-ledger/hiero-sdk-java#3010 ·
Los mantenedores suelen responder en 1 día
-
Optimize consumer version heatmap aggregation to avoid repeated scansPosiblemente ocupada @praykaria31 la tomó hoy. Abiertotype/enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Apicurio/apicurio-registry#10662 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
a:false-positive
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
Los mantenedores suelen responder en 1 día
-
status: waiting-for-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
spring-projects/spring-boot#52347 ·
Los mantenedores suelen responder en 2 días