Das SpringCloud-Gateway ruft openFeign auf und wirft @org.springframework.beans.factory.annotation.Autowired(required=t

Problembeschreibung

Im Prozess der einheitlichen Authentifizierung und Authentifizierung auf der Gateway-Ebene muss die Schnittstelle des Authentifizierungsservers remote aufgerufen werden, um Authentifizierungsvorgänge durchzuführen. Während der Verwendung von OpenFiegn zum Tätigen von Remote-Aufrufen trat jedoch der folgende Fehlerstapel auf, der dazu führte, dass der Remote-Aufruf fehlschlug.

Stapelinformationen

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

Schlüsselinformation

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

Lösung

Stapelanalyse: HttpMessageConverters wurde nicht zur Verwaltung in den Container eingefügt.
1. Quellcode: HttpMessageConverters.javaEs wurde keine Ausnahme gefunden, daher habe ich begonnen zu prüfen, ob sie vorhanden ist AutoConfiguration. ÖffnenHttpMessageConvertersAutoConfiguration.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. Quellcode: @Conditional(NotReactiveWebApplicationCondition.class) @ConditionalEs handelt sich um Spring4eine neu bereitgestellte Annotation. Ihre Funktion besteht darin, anhand bestimmter Bedingungen zu beurteilen. Wenn die Bedingungen erfüllt sind, registrieren Sie den Container beanund zeigen Sie dann die Klasse an.NotReactiveWebApplicationCondition

static class NotReactiveWebApplicationCondition extends NoneNestedConditions {

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

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

		}

	}

3. Spring Cloud GatewayEs basiert WebFluxauf und wird ReactiveWebdaher nicht automatisch injiziert. HttpMessageConvertersAlso habe ich den Quellcode direkt in die Konfigurationsdatei kopiert Beanund es endlich geschafft.

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

Guess you like

Origin blog.csdn.net/u014641168/article/details/131111967