接口调用方式2
目前经常使用的框架是Springboot,我们经常会遇到系统之间相互进行调用,具体的调用方式如下
- 在Spring Boot中调用外部API接口,可以使用
RestTemplate
或者WebClient
用RestTemplate
的示例代码
添加依赖到pom.xml 中
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
RestTemplate中几个常用的方法:getForObject()、getForEntity()、postForObject()、postForEntity()。其中,getForObject() 和 getForEntity() 方法可以用来发送 GET 请求
RestTemplateConfig配置类如下:
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory){
return new RestTemplate(factory);
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setReadTimeout(5000);//单位为ms
factory.setConnectTimeout(5000);//单位为ms
return factory;
}
}
接口调用如下
@RestController
public class TestRestTemplate {
@Resource
private RestTemplate restTemplate;
@GetMapping(value = "/saveUser")
public void saveUser(String userId) {
String url = "http://127.0.0.1:8080/master/test";
Map map = new HashMap<>();
map.put("userId", "hy001");
String results = restTemplate.postForObject(url, map, String.class);
}
}
- 使用FeignClient调用
FeignClient调用大多用于微服务开发中,各服务之间的接口调用。它以Java接口注解的方式调用HTTP请求,使服务间的调用变得简单
在使用方引入依赖
<!-- Feign注解 这里openFeign的版本要和自己使用的SpringBoot匹配-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<!-- <version>4.0.1</version> -->
</dependency>
1. 服务接口调用方,启动时启动类必须加上@EnableFeigncliens注解
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableFeignClients
public class StudyfeignApplication {
public static void main(String[] args) {
SpringApplication.run(StudyfeignApplication.class, args);
System.out.println("项目启动成功");
}
}
2.Feign接口调用服务controller层
import com.hysoft.studyfeign.service.SysUserClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("feignService")
public class SysUserController {
@Autowired
private SysUserClient sysUserClient;
@PostMapping("getUserId")
public void getUserId(String userId){
this.sysUserClient.getUserById(userId);
}
}
3.服务接口调用service层
feign的客户端需要使用@FeignClient注解进行表示,这样扫描时才知道这是一个feign客户端。@FeignClient最常用的就两个属性,一个name,用于给客户端定义一个唯一的名称,另一个就是url,用于定义该客户端调用的远程地址。
url中的内容,可以写在配置文件application.yml中,便于管理
Service中的调用关系如下
@Service
@FeignClient(name = "feign-service",url = "${master-getuserbyId}")
public interface SysUserClient {
@PostMapping("/master/test")
String getUserById(String id);
}