openfein是spring cloud的一個服務間調用元件,這邊文檔介紹使用openfeign代替HttpClient調用遠端服務
1. 建立一個springboot服務RemoteService
application.properties
server.port=9001
spring.application.name=remote-service
TestRest.java
@RestController
@RequestMapping("/test")
public class TestRest {
@PostMapping("/token")
public String token(@RequestParam("username")String username, @RequestParam("password")String password) {
return Base64.getEncoder().encodeToString((username + password).getBytes(StandardCharsets.UTF_8));
}
}
RemoteApplication.java
@SpringBootApplication
public class RemoteApplication {
public static void main(String[] args) {
SpringApplication.run(RemoteApplication.class, args);
}
}
啟動服務通路接口
API:/test/token
Param: username=root,password=123456
傳回結果:cm9vdDEyMzQ1Ng==
2. 建立一個服務使用feign調用上面服務
application.properties
spring.application.name=springboot_demo
server.port=8991
User.java
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
==TestFeign.java==
@FeignClient(
name = "TestFeign",
url = "baidu.com",
path = "/test"
)
public interface TestFeign {
@PostMapping("/token")
String getToken1(URI uri, @RequestParam("username")String username, @RequestParam("password")String password);
@PostMapping(value = "/token", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
String getToken2(URI uri, @SpringQueryMap User user);
}
HelloRest.java
@RestController
@RequestMapping("/hello")
public class HelloRest {
@Autowired
private TestFeign testFeign;
@GetMapping("/name")
public String getName(@RequestParam(value = "name", defaultValue = "boot") String name) {
return "hello:" + name;
}
@PostMapping("/token1")
public String getToken1(@RequestParam("username")String username, @RequestParam("password")String password) throws Exception{
return testFeign.getToken1(new URI("localhost:9001"), username, password);
}
@PostMapping("/token2")
public String getToken2(@RequestParam("username")String username, @RequestParam("password")String password) throws Exception{
User user = new User();
user.setUsername(username);
user.setPassword(password);
return testFeign.getToken2(new URI("localhost:9001"), user);
}
}
Application.java
@EnableFeignClients
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
記得加
@EnableFeignClients
測試
-
接口/hello/token1, /hello/token2
請求參數都是username=root, password=123456
傳回結果都是:cm9vdDEyMzQ1Ng==