1. Clasificación de problemas:
Excepción: org.springframework.web.httprequestmethodnotsupportedException: método de solicitud 'post' no admitido
Es obvio que cuando Feign finalmente ejecuta la solicitud HTTP, este método se considera post, pero el cliente Feign define requestMethod.get o @getmapping, lo que causa un error.
Entonces, ¿por qué Feign piensa que este método es Post?
Seguimiento del código fuente:
1. Veamos la anotación de FeignClient como la entrada:
2. Según el estilo consistente de Spring Cloud, abrimos la clase FeignAutoconfiguration para ver la lógica de configuración:
Mire la anotación en la caja roja de la imagen de arriba: esta clase se activa cuando no hay iloadbalancer. Nuestro proyecto ha habilitado la cinta, por lo que debe existir. Mire nuevamente los comentarios: los clientes de cinta de equilibrio de carga deben usar FeignRibbonClientAutoconfiguration para configurar esta clase. ir ~
Como se muestra en la imagen de arriba, mire los comentarios de la caja roja: en el orden de importación de arriba a abajo: httpclientfeignloadBalancedConfiguration> okhttpfeignloadBalancedConfiguration> DefaultFeignLoadBalancedConfiguration, la herramienta HTTP subyacente correspondiente: htttppclient> okhttp> httpurlConnection
De acuerdo con la definición del protocolo HTTP, se admite @requestbody+ requitmethod.get. Entonces depende de las diferentes implementaciones del kit de herramientas. Al verificar el código fuente, descubrí que OKHTTP y HttpurlConnection no son compatibles (informar un error), solo HttppClient lo admite. (La httpurlconnection predeterminada informará un error)
Sabemos que solo HttpClient admite @requestbody+requestmethod.get, por lo que debemos cumplir con las condiciones y ir a httpclientfeignloadBalancedConfiguration. Consulte el código fuente:
Se puede ver que la clase ApachehttpClient existe bajo el classpath. Agreguemos el POM:
<Spendency> <ProupId> io.github.openfeign </groupid> <artifactid> Feign-HttpClient </arfactid> </pendency>
Finalmente, el paquete Feign-HttpClient-9.5.0.JAR se cargó, y se abrió y descubrió que había apachehttpclient.class. Haga clic y vea que en realidad era un httppclient.
Por lo tanto, la POM presenta Feign-HttpClient-》 Apachehttpclient.class-》 Vaya a httpClientfeignloadBalancedConfiguration-》 Al solicitar, httpclient-》 Soporte @requestbody+ requestmethod.get
2. Solución:
Introducido en POM
<Spendency> <ProupId> io.github.openfeign </groupid> <artifactid> Feign-HttpClient </arfactid> </pendency>
Después de actualizar Maven, verifique si el paquete Feign-HttpClient-9.5.0.JAR existe en el proyecto.
Resumir
Lo anterior es la solución a Spring Cloud Feign que el editor le presentó. La solución al error de Spring Cloud Feign no admite @requestbody+ requestmethod.get. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!