Este artigo apresenta um resumo dos problemas encontrados no uso do Spring Cloud Feign. É compartilhado com você. Os detalhes são os seguintes:
Pergunta 1:
No exemplo anterior, conversamos sobre isso
@RequestMapping (value = "/user/{id}", método = requestMethod.get) @getMapp ("/user/{id}") Os efeitos dessas duas anotações são equivalentes, mas, no uso, você pode usar apenas o método acima e não pode usar o @GetMapping diretamente. Vamos alterar o exemplo anterior para a anotação @GetMapping para ver o efeito. Descobrimos que, quando o serviço é reiniciado após modificar a anotação, a seguinte exceção foi lançada:
A cópia do código é a seguinte:
Causado por: java.lang.illegalstateException: método findbyId não anotado com o tipo de método http (ex.get, post)
A exceção significa que não especificamos o método HTTP
Pergunta 2:
No exemplo anterior, expusemos o serviço RESTful da seguinte forma:
@GetMapping ("/modelo/{id}") public user findbyId (@pathvariable long id) {return client.findbyid (id); }Aqui, usamos diretamente os parâmetros do método findbyid
@PathVariable Long Id
Vamos mudar o método de Feign para isso
@RequestMapping (value = "/user/{id}", método = requestMethod.get) FindById (@PathVariable Long ID); Então iniciamos o serviço e descobrimos que uma exceção foi lançada novamente, com as informações de exceção da seguinte forma:
A cópia do código é a seguinte:
Causado por: java.lang.illegalStateException: A anotação PathVariable estava vazia no parâmetro 0.
A aproximadamente significa que o primeiro parâmetro da anotação PathVariable não pode estar vazio, alteramos para o seguinte método:
@RequestMapping (value = "/user/{id}", método = requestMethod.get) user findbyid (@pathvariable ("id") longo id); Comece de novo e ache que está tudo bem.
Pergunta 3: Problema de vários parâmetros
@RequestMapping (value = "/user/nome", método = requestMethod.get) FindByUserName (nome de usuário final de string, endereço da string final);
Ao iniciar o serviço, será relatada a seguinte exceção:
Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract com.chhliu.springboot.restful.vo.User com.chhliu.springboot.restful.feignclient.UserFeignClient.findByUsername(java.lang.String,java.lang.String)
Causa da exceção: Ao usar o Feign, se a solicitação GET for enviada, você precisará adicionar a anotação @RequestParam para modificar antes do parâmetro de solicitação e o controlador não poderá adicionar esta anotação para modificar.
A solução para o problema acima é a seguinte:
@RequestMapping (value = "/user/nome", método = requestMethod.get) FindyUserName (@RequestParam ("UserName") Final String UserName, @RequestParam ("endereço") endereço da sequência final); Pergunta 4: Método de solicitação 'post' não suportado
Exemplo de código de erro:
@RequestMapping (value = "/user/nome", método = requestMethod.get) FindByUserName (string final Name, @RequestParam ("endereço") endereço da sequência final); Nota: O parâmetro de nome de usuário acima não é modificado com a anotação @RequestParam. Se você enviar uma solicitação, descobrirá que o serviço chamado está relatando o método de solicitação de 'post' não suportado. Usamos claramente o método get. Por que o serviço chamado é considerado um método de postagem? O motivo é que, quando o nome de usuário não é modificado pela anotação @RequestParam, ele será tratado automaticamente como um órgão de solicitação. Enquanto houver um corpo, ele será considerado uma solicitação de postagem por Feign, para que todo o serviço seja enviado como uma solicitação de postagem com um parâmetro de solicitação e um corpo.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.