目前经常使用的框架是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); }