(二)声明式REST客户端Feign

Feign:一个声明式的REST客户端,它能让REST调用更加简单。

Spring cloud集成Feign
  1. 搭建Spring cloud的基本环境

参考:https://blog.csdn.net/admin_15082037343/article/details/106959438

  1. 在demo-client中添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 启动类添加注解@EnableFeignClients
package com.demo.client;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(ClientApplication.class, args);
    }

}
  1. 新增接口UserClient
package com.demo.client.api;

import com.demo.client.entity.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

@FeignClient(value = "demo-provider", path = "/user")
public interface UserClient {

    @GetMapping
    Object findUser(@RequestParam("pageNo") Integer pageNo, @RequestParam("size") Integer size);

    @PostMapping
    User save(@RequestBody User user);

    @GetMapping("/{id}")
    User findById(@PathVariable("id") String id);

    @DeleteMapping("/{id}")
    String deleteById(@PathVariable("id") String id);

}

findUser()方法返回Object在这里只是为了方便,可以自己封装实体类。
@FeignClient:value代表访问的应用,path:请求路径的统一前缀。

  1. UserController更新如下
package com.demo.client.controller;

import com.demo.client.api.UserClient;
import com.demo.client.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserClient userClient;

    @GetMapping
    public Object findUser(@RequestParam(required = false, defaultValue = "1") Integer pageNo
            , @RequestParam(required = false, defaultValue = "10") Integer size) {
        return userClient.findUser(pageNo, size);
    }

    @RequestMapping(method = { RequestMethod.POST, RequestMethod.PUT })
    public User save(@RequestBody User user) {
        return userClient.save(user);
    }

    @GetMapping("/{id}")
    public User findById(@PathVariable String id) {
        return userClient.findById(id);
    }

    @DeleteMapping("/{id}")
    public String deleteById(@PathVariable String id) {
        userClient.deleteById(id);
        return id;
    }

}

在这里就不使用RestTemplate对象去调用接口了,而是使用UserClient替换,替换之后代码更简单了。


左边为使用RestTemplate调用接口,右边为Feign调用接口。

Feign日志配置
  1. 新建类FeignConfiguration
package com.demo.client.conf;

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignConfiguration {

    @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }

}
  1. UserClient 的 @FeignClient注解指定
@FeignClient(value = "demo-provider", path = "/user", configuration = FeignConfiguration.class)
  1. application.yml配置
logging:
  level:
    com:
      demo:
        client:
          api:
            UserClient: debug

此时访问接口发现控制台打印日志如下

源码参考

https://github.com/phone15082037343/demo.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流年ln

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值