Nesta seção, exploraremos como construir solicitações de vários parâmetros usando o Feign. O autor usa as solicitações dos métodos GET e POST como exemplos para explicar. Os princípios de solicitação de outros métodos (como excluir, colocar etc.) são os mesmos, e os leitores podem estudá -los eles mesmos.
Obtenha solicitações vários parâmetros URL
Suponha que o URL que solicitamos contenha vários parâmetros, como http: // microsservice-provider-user/get? Id = 1 & username = zhang san, como construí-lo?
Sabemos que o Spring Cloud adicionou suporte à anotação do MVC da primavera para fingir, para que possamos tentar de acordo com o método de escrita do MVC da primavera:
@FeignClient ("MicrosService-Provider-User") Public Interface UserFeignClient {@RequestMapping (Value = "/get", Method = requestMethod.get) Public User Get0 (usuário do usuário);}No entanto, este método de escrita não está correto e o console produzirá uma exceção semelhante ao seguinte.
Feign.Feignexception: Status 405 Reading UserFeignClient#get0 (usuário); contente:
{"Timestamp": 1482676142940, "Status": 405, "Erro": "Método não permitido", "Exception": "org.springframework.web.httprequestmethodnotsupportEdException", "Mensagem": "Método" Post 'não suportado "," PathNoTs: "
A partir da exceção, podemos ver que, embora especifiquem o método GET, o Feign ainda usará o método POST para enviar a solicitação.
A maneira correta de escrever é a seguinte:
(1) Método 1
@FeignClient (name = "MicrosService-provider-user") interface pública UserFeignClient {@RequestMapping (value = "/get", método = requestmethod.get) public user get1 (@requestParam ("id") long Id, @requestparam ("usernamename) stringname);Esta é a maneira mais intuitiva. O URL possui vários parâmetros e os métodos na interface Feign possuem vários parâmetros. Use a anotação @RequestParam para especificar quais são os parâmetros solicitados.
(2) Método 2
Os URLs multi-parâmetros também podem ser criados usando o mapa. Quando existem muitos parâmetros de URL de destino, esse método pode ser usado para simplificar a escrita da interface FEIGN.
@FeignClient (name = "MicrosService-provider-user") interface pública UserFeignClient {@RequestMapping (value = "/get", métod = requestMethod.get) public user get2 (@requestparam map <string, objeto> map);}Ao ligar, você pode usar o código semelhante ao seguinte.
Public User Get (String Username, String senha) {hashmap <string, object> map = maps.newhashmap (); map.put ("id", "1"); map.put ("Nome de usuário", "Zhang San"); Retorne this.UserFeignClient.get2 (map);} A solicitação de postagem contém vários parâmetros
Vamos discutir como construir uma solicitação de postagem contendo vários parâmetros usando o Feign. Suponha que o controlador do provedor de serviços esteja escrito assim:
@RestControllerPublic Classe UserController {@PostMapping ("/post") public Post (@RequestBody User) {...}}Como usamos o Feign para solicitar? A resposta é muito simples, exemplo:
@FeignClient (name = "MicrosService-provider-user") interface pública UserFeignClient {@RequestMapping (value = "/post", método = requestmethod.post) public user Post (usuário do usuário do @RequestBody);} PONTAS
(1) Para detalhes, consulte o projeto Microservice-Provider-User-Multiple-Params e o projeto Microservice-Consumer-Movie-Fign-Multiple-Params no código que o acompanha deste livro.
(2) Além dos métodos explicados nesta seção, também podemos escrever nosso próprio codificador para construir solicitações de vários parâmetros, mas esse método tem um custo de codificação mais alto e menor reutilização de código. Portanto, este livro não será repetido.
Leitura estendida
(1) Espero que a Feign possa apoiar solicitações de parâmetros para usar a questão de Pojo: https://github.com/spring-cloud/spring-cloud-netflix/issues/1253
(2) Edição recomendada para usar anotações nativas Feigna: https://github.com/spring-cloud/spring-cloud-netflix/issues/659
(3) Recomenda-se melhorar a funcionalidade do Feign: https://github.com/spring-cloud/spring-cloud-netflix/issues/1360
(4) Recomenda-se apoiar o órgão de solicitação opcional (atualmente, Feign relatará uma exceção quando postar um nulo): https://github.com/spring-cloud/spring-cloud-netflix/issues/1047
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.