在項目的啟動文件加入:@EnableFeignClients 注解,
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.feign.EnableFeignClients; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @EnableEurekaClient @SpringBootApplication @EnableFeignClients public class FeignApp { public static void main(String[] args) { SpringApplication.run(FeignApp.class, args); } }
實例結構如下:
那么有實體類: User.java
Fengn客戶端:UserFeignClient.java
控制器: MovieController.java調取第三方user接口
User.java
import java.math.BigDecimal; public class User { private Long id; private String username; private String name; private int age; private BigDecimal balance; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public BigDecimal getBalance() { return balance; } public void setBalance(BigDecimal balance) { this.balance = balance; } }
UserFeign客戶端
其中:@FeignClient("spring-boot-user"): spring-boot-user是eureka服務里面user項目的名稱,加入此注解,能直接連接user項目接口
import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.muyang.bootmovie.entity.User; @FeignClient("spring-boot-user") public interface UserFeignClient { // 兩個坑:1. @GetMapping不支持 2. @PathVariable得設置value @RequestMapping(value="/simple/{id}", method=RequestMethod.GET) public User findById(@PathVariable("id") Long id); @RequestMapping(value="/test", method=RequestMethod.POST) public User postUser(@RequestBody User user); }
MovieController控制中心,調取UserFeign客戶端
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.muyang.bootmovie.entity.User; import com.muyang.bootmovie.feign.UserFeignClient; @RestController public class MovieController { @Autowired private UserFeignClient userFeignClient; @GetMapping("/movie/{id}") public User findById(@PathVariable("id") Long id) { return this.userFeignClient.findById(id); } @RequestMapping(value="/test", method=RequestMethod.GET) public User userPost(User user) { return this.userFeignClient.postUser(user); } }