与HttpClient和RestTemplate相比,使用springcloud的feign调用远程接口更为简便,可以通过配置的方式实现远程接口调用。但是有时我们并不想使用springcloud,而只是想在springboot中使用feign,我在网上搜了很多springboot单独集成feign的文章,但都不能用。在通过学习、开发后简单整理了一个教程。详细介绍如何在springboot中单独集成feign,以简便的方式调用远程接口。
1.引入maven
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<java.version>1.8</java.version>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
<!--添加springcloud版本-->
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--lombok可自动生成getter、setter-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--feign远程接口调用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
<!--管理springcloud版本,引入openfeign时不用添加version-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.启动类添加@EnableFeignClients注解,开启feign
@EnableFeignClients //开启feign
@SpringBootApplication
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
3.像平常一样写一个service接口,在此基础上添加一些feign注解
@FeignClient(name = "userService",url = "${ip}:${port}/${base_url}")
public interface UserService {
/**
* 根据条件查询用户
* @param user查询参数
* @return 用户列表
*/
@PostMapping("searchUsers")
List<User> searchUsers(@RequestBody User user);
}
在service接口上添加@FeignClient注解,name为springbean的id,用于注入service时使用,url为ip地址
最终调用的接口地址为url加上@PostMapping的value。
@FeignClient的url可以使用配置文件中的参数。使用${参数名}引入即可。
对应的接口:
@RestController("/user")
public class UserController{
@PostMapping("searchUsers")
List<User> searchUsers(@RequestBody User user);
}
由此可见,在使用feign时,service方法的调用方式(get、post)和参数、参数格式、返回值格式需要和对应的接口保持一致
4.调用接口
@Autowired
private UserService userService;
/**
*查询18岁的用户并打印到控制台
*/
public void printUsers(){
User user = new User();
user.setAge(18);
List<User> userList = userService.searchUsers(user);
System.out.println("userList = " + userList);
}