五、Feign
1. 简介
Feign是一个HTTP客户端,可以更快捷、优雅地调用HTTP服务,使编写HTTPClient变得更简单。
在Spring Cloud中使用Feign非常简单,只需要创建一个接口,然后在接口上添加一些注解就可以了。
2. 用法
步骤:
-
编辑pom.xml文件,配置Feign和Eureka-Client依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
-
编辑application.yml文件,配置eureka
eureka: client: # 是否将自己注册到Eureka-Server中,默认的为true register-with-eureka: false # 指定服务注册中心的地址 service-url: defaultZone: http://localhost:7001/eureka/
-
编辑启动类,启用Eureka客户端
@SpringBootApplication @EnableEurekaClient // 启用Feign客户端,扫描指定包下所有的feign注解 @EnableFeignClients(basePackages = "com.itany.service") public class CloudConsumer8080Application { public static void main(String[] args) { SpringApplication.run(CloudConsumer8080Application.class, args); } }
-
创建接口并配置
// 调用的服务名,到Eureka中寻找对应的微服务
@FeignClient("user-provider/user")
public interface UserService {
@GetMapping
public ResponeResult userList();
@GetMapping("/{id}")
public ResponseResult user(@PathVariable(value = "id") Integer id);
@PostMapping("/form")
@Headers({"Content-Type:x-www-form-urlencode"})
public ResponeResult addForm(User user);
@PostMapping("/json")
@Headers({"Content-Type:application/json"})
public ResponeResult addJson(@RequestBody User user);
@DeleteMapping("/{id}")
public ResponeResult delete(@PathVariable("id") Integer id);
@PutMapping("/v2/user-service/user")
@Headers({"Content-Type:application/json"})
public ResponeResult update(@RequestBody User user);
}
3. 传参
feign传递对象参数的解决方式:
- 方式一:将对象参数拆为多个简单类型参数,且必须添加@RequestParam注解
- 方式二:使用Map替代对象参数,且必须添加@RequestParam注解
- 方式三:标明请求的
Content-Type