原生的feign是不支持spring mvc注解的,spring cloud在feign的基础上做了扩展才可以支持,当我们现在spring cloud中使用原生的注解方式定义客户端时,通过配置契约可以实现这个要求,目前spring cloud中默认的时springmvc contract,当我们配置使用了该默认的契约后,之前定义的client就失效,当然使用配置属性的方式配置契约也是允许的:
@Configuration
public class FeignConfiguration {
@Bean public Contract feignContract() {
return new feign.Contract.Default();
}
}
继承特性
feign的继承特性可以支持我们把服务的接口定义单独抽提出来,作为公共的依赖让其他模块调用,让我们来看一下具体操作:
定义服务feign-inherit-api,添加feign依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
定义接口,指定服务关联:
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
/**
* @Description:
* @Author: LeiZhenZi
* @Date: 2021/7/6
* @Time: 下午2:01
* Copyright (C) 2020
* All rights reserved.
*/
@FeignClient("feign-inherit-provider")
public interface UserRemoteClient {
@GetMapping("/user/name")
String getName();
}复制
定一个服务提供者feign-inherit-provider,引入feign-inherit-api:
<dependency>
<groupId>net.biancheng</groupId>
<artifactId>feign-inherit-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
实现UserRemoteClient等api服务的接口:
import com.jetfire.ribbonnativedemo.interfaces.UserRemoteClient;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description:
* @Author: LeiZhenZi
* @Date: 2021/7/6
* @Time: 下午2:06
* Copyright (C) 2020
* All rights reserved.
*/
@RestController
public class DemoController implements UserRemoteClient{
@Override
public String getName() {
return "abc";
}
}复制
创建一个服务消费者 feign-inherit-consume,注入实现api服务接口的具体类来完成消费者具体的业务逻辑:
result getNameresult复制
结语
今天的分享就到这里,我是雷记,专注于分享关于开发编程相关的技术干货,如果今日的分享对您有帮助的话,还望不吝关注点赞,这对我很重要!如果各位在开发过程中遇到棘手问题,可以扫描下图二维码加入,和雷记与其他小伙伴一起探讨解决,让我们努力让每一个问题都得到解决!