Este artículo presenta un resumen de los problemas encontrados en el uso de Spring Cloud Feign. Se comparte contigo. Los detalles son los siguientes:
Pregunta 1:
En el ejemplo anterior, hemos hablado de ello
@RequestMapping (valor = "/user/{id}", método = requestmethod.get) @getmapping ("/user/{id}") Los efectos de estas dos anotaciones son equivalentes, pero en el uso fingido, solo puede usar el método anterior y no puede usar @getmapping directamente. Cambiemos el ejemplo anterior a la anotación @getmapping para ver el efecto. Descubrimos que cuando el servicio se reinicia después de modificar la anotación, se lanzó la siguiente excepción:
La copia del código es la siguiente:
Causado por: java.lang.illegalStateException: método FindById no anotado con el tipo de método HTTP (ex.get, post)
La excepción significa que no especificamos el método HTTP
Pregunta 2:
En el ejemplo anterior, expusimos el servicio RESTFUL de la siguiente manera:
@GetMapping ("/Template/{ID}") Public User FindById (@PathVariable Long ID) {return client.findById (id); }Aquí, usamos directamente los parámetros del método FindByid
@PathVariable Long ID
Cambiemos el método de Feign a este
@RequestMapping (value = "/user/{id}", método = requestmethod.get) user findByid (@PathVariable Long id); Luego comenzamos el servicio y descubrimos que se volvió a lanzar una excepción, con la información de excepción de la siguiente manera:
La copia del código es la siguiente:
Causado por: java.lang.illegalStateException: la anotación PathVariable estaba vacía en el parámetro 0.
El mal significa que el primer parámetro de la anotación PathVariable no puede estar vacía, lo cambiamos al siguiente método:
@RequestMapping (valor = "/user/{id}", método = requestmethod.get) user findByid (@pathvariable ("id") largo id); Comience de nuevo y descubra que todo está bien.
Pregunta 3: Problema de parámetros múltiples
@RequestMapping (value = "/user/name", método = requestmethod.get) usuario findByUsername (nombre de usuario final, nombre de usuario, dirección de cadena final);
Al comenzar el servicio, se informará la siguiente excepción:
Causado por: java.lang.illegalstateException: el método tiene demasiados parámetros del cuerpo: abstracto público com.chhliu.springboot.restful.vo.user com.chhliu.springboot.restful.feignclient.userfefeign.findbyusername (java.lang.string, java.lang.string)
Causa de excepción: cuando se usa Feign, si se envía la solicitud GET, debe agregar la anotación @RequestParam para modificar antes del parámetro de solicitud, y el controlador no puede agregar esta anotación para modificar.
La solución al problema anterior es la siguiente:
@RequestMapping (valor = "/user/name", método = requestmethod.get) usuario findByUsername (@RequestParam ("UserName") String final de usuario de cadena, @RequestParam ("Dirección") Dirección de cadena final); Pregunta 4: Método de solicitud 'Publicar' no es compatible
Ejemplo de código de error:
@RequestMapping (value = "/user/name", método = requestmethod.get) usuario findByUsername (nombre de usuario final de cadena, @requestparam ("dirección") dirección de cadena final); Nota: El parámetro de nombre de usuario anterior no se modifica con la anotación @RequestParam. Si envía una solicitud, encontrará que el Servicio llamado ha estado informando el método de solicitud 'POST' no compatible. Usamos claramente el método GET. ¿Por qué se considera que el servicio llamado es un método post? La razón es que cuando el nombre de usuario no se modifica por la anotación @RequestParam, se tratará automáticamente como un cuerpo de solicitud. Mientras haya un cuerpo, se considerará una solicitud posterior por Feign, por lo que todo el servicio se envía como una solicitud posterior con un parámetro de solicitud y un cuerpo.
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.