La puerta de enlace SpringCloud llama a openFeign y lanza @org.springframework.beans.factory.annotation.Autowired(required=t

Descripción del problema

En el proceso de autenticación unificada y autenticación en la capa de puerta de enlace, es necesario llamar de forma remota a la interfaz del servidor de autenticación para realizar operaciones de autenticación. Sin embargo, durante el proceso de uso de OpenFiegn para realizar llamadas remotas, apareció la siguiente pila de errores, lo que provocó que la llamada remota fallara.

información de la pila

feign.codec.EncodeException: No qualifying bean of type 'org.springframework.boot.autoconfigure.http.HttpMessageConverters' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
	at feign.ReflectiveFeign$BuildEncodedTemplateFromArgs.resolve(ReflectiveFeign.java:384)
	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
	|_ checkpoint ⇢ org.springframework.security.web.server.authorization.AuthorizationWebFilter [DefaultWebFilterChain]
	|_ checkpoint ⇢ org.springframework.security.web.server.authorization.ExceptionTranslationWebFilter [DefaultWebFilterChain]
	|_ checkpoint ⇢ org.sprin

Información clave

No qualifying bean of type 'org.springframework.boot.autoconfigure.http.HttpMessageConverters

solución

Análisis de pila: HttpMessageConverters no se inyectó en el contenedor para su administración
1. Código fuente: HttpMessageConverters.javano se encontró ninguna excepción, así que comencé a verificar si existía AutoConfiguration.HttpMessageConvertersAutoConfiguration.java

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(HttpMessageConverter.class)
@Conditional(NotReactiveWebApplicationCondition.class)
@AutoConfigureAfter({ GsonAutoConfiguration.class, JacksonAutoConfiguration.class, JsonbAutoConfiguration.class })
@Import({ JacksonHttpMessageConvertersConfiguration.class, GsonHttpMessageConvertersConfiguration.class,
		JsonbHttpMessageConvertersConfiguration.class })
public class HttpMessageConvertersAutoConfiguration {
}

2. Código fuente: @Conditional(NotReactiveWebApplicationCondition.class) @Conditionales Spring4una anotación recién proporcionada, su función es juzgar según ciertas condiciones, si se cumplen las condiciones, registrar el contenedor beany luego ver la clase.NotReactiveWebApplicationCondition

static class NotReactiveWebApplicationCondition extends NoneNestedConditions {

		NotReactiveWebApplicationCondition() {
			super(ConfigurationPhase.PARSE_CONFIGURATION);
		}

		@ConditionalOnWebApplication(type = Type.REACTIVE)
		private static class ReactiveWebApplication {

		}

	}

3. Spring Cloud GatewayEstá basado WebFluxen , ReactiveWebpor lo que HttpMessageConvertersno se inyectará automáticamente. Entonces copié directamente el código fuente en el archivo de configuración Beany finalmente lo logré.

# 新建配置类
@Configuration
public class WebFluxWithOpenFeignConfig {
    @Bean
    @ConditionalOnMissingBean
    public HttpMessageConverters messageConverters(ObjectProvider<HttpMessageConverter<?>> converters) {
        return new HttpMessageConverters(converters.orderedStream().collect(Collectors.toList()));
    }
}

Supongo que te gusta

Origin blog.csdn.net/u014641168/article/details/131111967
Recomendado
Clasificación