이 섹션에서는 Feign을 사용하여 다중 매개 변수 요청을 구성하는 방법을 살펴 봅니다. 저자는 GET 및 POST 방법의 요청을 설명 할 예제로 사용합니다. 다른 방법의 요청 원칙 (삭제, Put 등)은 동일하며 독자는 스스로 연구 할 수 있습니다.
요청을 여러 매개 변수 URL로 가져옵니다
우리가 요청한 URL에 http : // microService-provider-user/get? id = 1 & username = zhang san과 같은 여러 매개 변수가 포함되어 있다고 가정 해 봅시다.
우리는 Spring Cloud가 Spring MVC 주석 지원을 Feign에 추가했음을 알고 있습니다. 따라서 Spring MVC의 작문 방법에 따라 사용해 볼 수도 있습니다.
@FeignClient ( "microservice-provider-user") public interface userfeignclient {@requestmapping (value = "/get", method = requestmethod.get) public user get0 (사용자 사용자);}그러나이 작문 방법은 올바르게 아니며 콘솔은 다음과 비슷한 예외를 출력합니다.
feign.feignexception : 상태 405 읽기 userfeignclient#get0 (사용자); 콘텐츠:
{ "timestamp": 1482676142940, "status": 405, "error": "메소드 허용", "예외": "org.springframework.web.httprequestMethodnotsupportedException", "메시지"요청 방법 "지원되지 않음", "Path": "}}.
예외적으로 Get 메소드를 지정하지만 Feign은 여전히 게시물을 사용하여 요청을 보내는 것을 알 수 있습니다.
글을 쓰는 올바른 방법은 다음과 같습니다.
(1) 방법 1
@feignclient (name = "microservice-provider-user") public 인터페이스 userfeignclient {@requestmapping (value = "/get", method = requestmethod.get) public user get1 (@requestparam ( "id") long id, @requestparam ( "username") 문자열 username);};이것은 가장 직관적 인 방법입니다. URL에는 몇 가지 매개 변수가 있으며 Feign 인터페이스의 메소드에는 여러 매개 변수가 있습니다. @requestparam 주석을 사용하여 요청 된 매개 변수를 지정하십시오.
(2) 방법 2
다중 매개 변수 URL은지도를 사용하여 구축 할 수도 있습니다. 대상 URL 매개 변수가 많으면이 방법을 사용하여 Feign 인터페이스의 쓰기를 단순화 할 수 있습니다.
@FeignClient (이름 = "microService-provider-user") public interface userfeignclient {@requestmapping (value = "/get", method = requestmethod.get) public user get2 (@requestparam map <string, object> map);}호출 할 때 다음과 유사한 코드를 사용할 수 있습니다.
공개 사용자 get (문자열 사용자 이름, 문자열 암호) {hashmap <string, object> map = maps.newhashmap (); map.put ( "id", "1"); map.put ( "사용자 이름", "Zhang San"); reture this.userfeignclient.get2 (map);} 게시물 요청에는 여러 매개 변수가 포함됩니다
Feign을 사용하여 여러 매개 변수가 포함 된 게시물 요청을 구성하는 방법에 대해 논의 해 봅시다. 서비스 제공 업체의 컨트롤러가 다음과 같이 작성되었다고 가정합니다.
@RestControllerPublic Class USERCONTROLLER {@POSTMAPPING ( "/POST") 공개 사용자 게시물 (@RequestBody 사용자) {...}}Feign을 사용하여 요청하는 방법은 무엇입니까? 답은 매우 간단합니다.
@feignclient (name = "microservice-provider-user") public 인터페이스 userfeignclient {@requestmapping (value = "/post", method = requestmethod.post) public user post (@requestbody user);} 팁
(1) 자세한 내용은 마이크로 서비스 제공자-사용자 다-파람 프로젝트 프로젝트와 MicroService-consumer-movie-feign-multiple-params 프로젝트를 참조하십시오.
(2)이 섹션에서 설명 된 방법 외에도 다중 매개 변수 요청을 구성하기 위해 자체 인코더를 작성할 수 있지만이 방법은 인코딩 비용이 높고 코드 재사용성이 낮습니다. 그러므로이 책은 반복되지 않을 것입니다.
확장 된 독서
(1) Feign이 Pojo의 문제를 사용하기위한 매개 변수 요청을 지원할 수 있기를 바랍니다 : https://github.com/spring-cloud/spring-cloud-netflix/issues/1253
(2) Feign Native Annotations : https://github.com/spring-cloud/spring-cloud-netflix/issues/659를 사용하는 것이 권장됩니다
(3) Feign의 기능을 향상시키는 것이 좋습니다 : https://github.com/spring-cloud/spring-cloud-netflix/issues/1360
(4) 선택적 요청 본문을 지원하는 것이 좋습니다 (현재, Feign은 널 게시 할 때 예외를보고합니다) : https://github.com/spring-cloud/spring-cloud-netflix/issues/1047
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.