En esta sección exploraremos cómo construir solicitudes de varios parámetros utilizando Feign. El autor utiliza las solicitudes de los métodos GET y POST como ejemplos para explicar. Los principios de solicitud de otros métodos (como Delete, Put, etc.) son los mismos, y los lectores pueden estudiarlos ellos mismos.
Obtener solicitudes múltiples parámetros URL
Supongamos que la URL que solicitamos contiene múltiples parámetros, como http: // microservice-propider-user/get? Id = 1 & username = zhang san, ¿cómo construirlo?
Sabemos que Spring Cloud ha agregado soporte de anotación de Spring MVC para Feign, por lo que también podríamos intentarlo de acuerdo con el método de escritura de Spring MVC:
@FeIgnClient ("Microservice-Provider-User") Interfaz pública UserFeignClient {@RequestMapping (valor = "/get", método = requestmethod.get) Usuario público get0 (usuario de usuario);}Sin embargo, este método de escritura no es correcto, y la consola generará una excepción similar a la siguiente.
Feign.FeignException: Status 405 Reading UserFeignClient#get0 (usuario); contenido:
{"TimeStamp": 1482676142940, "Status": 405, "Error": "Método no permitido", "Excepción": "Org.springframework.web.httprequestMethodNotSuppportedException", "Mensaje": "Solicitar el método 'Post' no admitido", ":"/get "}}}}}}}}}}}}}
A partir de la excepción, podemos ver que aunque especificamos el método GET, Feign aún usará el método de publicación para enviar la solicitud.
La forma correcta de escribirlo es la siguiente:
(1) Método 1
@FeignClient (name = "Microservice-Provider-User") Interfaz pública UserFeignClient {@RequestMapping (valor = "/get", método = requestmethod.get) Usuario público get1 (@RequestParam ("id") Long ID, @requestparam ("UserName") String UserName);}Esta es la forma más intuitiva. La URL tiene varios parámetros, y los métodos en la interfaz Feign tienen varios parámetros. Use la anotación @RequestParam para especificar cuáles son los parámetros solicitados.
(2) Método 2
Las URL multiparaméter también se pueden construir usando MAP. Cuando hay muchos parámetros de URL objetivo, este método se puede utilizar para simplificar la redacción de la interfaz Feign.
@FeignClient (name = "Microservice-Provider-User") Interfaz pública UserFeignClient {@RequestMapping (valor = "/get", método = requestmethod.get) Usuario público get2 (@RequestParam Map <String, Object> Map);}Al llamar, puede usar un código similar al siguiente.
Public User Get (String UserName, String Password) {Hashmap <String, Object> Map = Maps.newhashMap (); map.put ("id", "1"); map.put ("Nombre de usuario", "Zhang San"); devuelve this.userfeignClient.get2 (map);} La solicitud de publicación contiene múltiples parámetros
Discutamos cómo construir una solicitud posterior que contenga múltiples parámetros utilizando Feign. Supongamos que el controlador del proveedor de servicios está escrito así:
@RestControllerPublic Class UserController {@PostMapping ("/post") Public User Post (@RequestBody User User) {...}}¿Cómo usamos Feign para solicitar? La respuesta es muy simple, ejemplo:
@FeignClient (name = "Microservice-Provider-User") Interfaz pública UserFeignClient {@RequestMapping (value = "/post", método = requestmethod.post) Public User Post (@RequestBody User User);} CONSEJOS
(1) Para más detalles, consulte el proyecto Microservice-Provider-User-Multiple-Params y el Proyecto de Params de Microservice-Consumer-Movie-Feign-Multiple-Params en el código acompañante de este libro.
(2) Además de los métodos explicados en esta sección, también podemos escribir nuestro propio codificador para construir solicitudes de varios parámetros, pero este método tiene un costo de codificación más alto y una menor reutilización del código. Por lo tanto, este libro no se repetirá.
Lectura extendida
(1) Espero que Feign pueda admitir solicitudes de parámetros para usar el problema de POJO: https://github.com/spring-cloud/spring-cloud-netflix/issues/1253
(2) El problema recomendado para usar anotaciones nativas fingir: https://github.com/spring-cloud/spring-cloud-netflix/issues/659
(3) Se recomienda mejorar la funcionalidad de Feign: https://github.com/spring-cloud/spring-cloud-netflix/issues/1360
(4) Se recomienda admitir el cuerpo de solicitudes opcionales (actualmente, Feign informará una excepción cuando se publique un nulo): https://github.com/spring-cloud/spring-cloud-netflix/issues/1047
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.