pom依赖
<!-- feign调用依赖 -->
<dependency>
<groupId>com.netflix.feign</groupId>
<artifactId>feign-core</artifactId>
<version>8.18.0</version>
</dependency>
<dependency>
<groupId>com.netflix.feign</groupId>
<artifactId>feign-jackson</artifactId>
<version>8.18.0</version>
</dependency>
feign接口
import com.tuling.common.utils.R;
import com.feigndemo.vo.OrderVo;
import feign.Headers;
import feign.Param;
import feign.RequestLine;
import org.springframework.web.bind.annotation.RequestBody;
public interface RemoteService {
@Headers({"Content-Type: application/json","Accept: application/json"})
@RequestLine("GET /order/findOrderByUserId/{userId}") //feign自带的注解
R findOrderByUserId(@Param("userId") Integer userId);
/**
* 对象名字不一定需要一样
* 参数在request对象中,然后会帮我们解析,封装到对象里面,所以对象名字不需要一样,里面的字段一样就行了.
* "Accept: application/json" //指定当前接口接收的json格式的数据
*/
@Headers({"Content-Type: application/json","Accept: application/json"})
@RequestLine("POST /order/save")
public R save(@RequestBody OrderVo order);
}
原生feignAPI调用
import com.feigndemo.vo.OrderVo;
import feign.Feign;
import feign.Request;
import feign.jackson.JacksonDecoder;
import feign.jackson.JacksonEncoder;
public class FeignDemo {
public static void main(String[] args) {
//基于json
RemoteService service = Feign.builder()
.encoder(new JacksonEncoder()) // 编码方式
.decoder(new JacksonDecoder()) // 解码方式
.options(new Request.Options(1000, 3500))//设置超时时间
//.retryer(new Retryer.Default(5000, 5000, 3))
.target(RemoteService.class, //代理对象
"http://localhost:8020/"); //目标地址
int userId = 4;
OrderVo vo = new OrderVo();
vo.setCommodityCode("C000003");
vo.setUserId(userId);
vo.setCount(5);
vo.setAmount(200);
// 保存操作
System.out.println(service.save(vo));
System.out.println(service.findOrderByUserId(userId)); //查询操作
}
}
结果:
{msg=success, code=0}
{msg=success, code=0, orders=[{id=5, userId=4, commodityCode=C000003, count=5, amount=200}, {id=6, userId=4, commodityCode=C000003, count=5, amount=200}]}
代码地址
https://gitee.com/zjj19941/ZJJ_Neaten5.10/tree/master/ZJJ_Feign/protogenesis-feign