Feign使用注意事项
使用Feign时,为了不写重复代码,需要写feign公共接口方便调用,这时候需要注意以下问题,以发邮件为例
定义公共接口
/**
* @author liuyalong
* @date 2020/10/12 17:42
* 定义Feign公用接口,注意 [不能] 在类上写@RequestMapping("/email")注解,不然会报Ambiguous mapping错误
*/
//@RequestMapping("/email") 不能在这里写!!!
public interface BaseMailController {
/**
* 在为Feign定义服务标准接口的时候,处理请求参数的方法参数,必须使用@RequestParam注解描述。
* 并且,无论方法参数名和请求参数名是否一致,都需要定义@RequestParam注解的value/name属性。
* 在Feign技术中,默认的发起POST请求的时候,请求的参数,都是在请求体中使用JSON数据传递的,不是name=value对传递的。
* 默认环境中,只要是Feign发起的POST请求,请求参数都是JSON数据。必须使用@RequestBody处理。
*/
@PostMapping("/email/sendEmail")
BaseCommonResult<Integer> sendEmail(
@RequestParam(value = "to") String[] to,
@RequestParam(value = "subject") String subject,
@RequestParam(value = "text") String text,
@RequestParam(value = "filenames", required = false) String[] filenames
);
}
Feign调用
@RestController
public class SendEmailController implements BaseMailController {
@Autowired
private MailServices mailServices;
/**
*
在接口中,已经将请求URL和方法耦合到一起了。
* 所以在当前的控制器中,不能重复定义@RequestMapping来约束请求URL,
* 不需要再使用@PathVariable,但是POST请求的JSON数据还是要使用@RequestBody
*/
@Override
public BaseCommonResult<Integer> sendEmail(
@RequestParam(value = "to") String[] to,
@RequestParam(value = "subject") String subject,
@RequestParam(value = "text") String text,
@RequestParam(value = "filenames", required = false) String[] filenames
) {
EmailEntity emailEntity = new EmailEntity();
emailEntity.setFilenames(filenames);
emailEntity.setSubject(subject);
emailEntity.setText(text);
emailEntity.setTo(to);
try {
mailServices.sendMail(emailEntity);
} catch (Exception e) {
e.printStackTrace();
return BaseCommonResult.failed("邮件发送失败");
}
return BaseCommonResult.success(1, "邮件发送成功");
}
}
Feign使用注意事项的更多相关文章
- springcloud-feign组件实现声明式的调用
11.使用feign实现声明式的调用 使用RestTemplate+ribbon已经可以完成对服务端负载均衡的调用,为什么还要使用feign? @RequestMapping("/hi&qu ...
- springcloud应用思考
1 springcloud注册中心eureka和zookeeper注册中心的区别: eureka注册中心,在服务选主的时候服务还是可以用的,zookeeper注册中心在选举的时候整个服务瘫痪了,是不可 ...
- Feign性能优化注意事项
一.FeignClient注解 FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上 @FeignClient(name ...
- Feign 注意事项
一.FeignClient注解 FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上 1 2 3 4 5 @FeignC ...
- Feign性能优化注意事项--超时
Caused by: java.lang.IllegalStateException: PathVariable annotation was empty on param 1. at feign ...
- feign调用过程注意事项
Feign是Netflix开发的声明式.模板化的HTTP客户端, Feign可以帮助我们更快捷.优雅地调用HTTP API. 在Spring Cloud中,使用Feign非常简单——创建一个接口,并在 ...
- 在dropwizard中使用feign,使用hystrix
前言 用惯了spring全家桶之后,试试dropwizard的Hello World也别有一帆风味.为了增强对外访问API的能力,需要引入open feign.这里简单在dropwizard中使用fe ...
- 不使用SpringBoot如何将原生Feign集成到Spring中来简化http调用
在微服务架构中,如果使用得是SpringCloud,那么只需要集成SpringFeign就可以了,SpringFeign可以很友好的帮我们进行服务请求,对象解析等工作. 然而SpingCloud是依赖 ...
- Spring Cloud 组件 —— feign
feign 作为一个声明式的 Http Client 开源项目.在微服务领域,相比于传统的 apache httpclient 与在 spring 中较为活跃的 RestTemplate 更面向服务化 ...
随机推荐
- Redis在springboot项目的使用
一.在pom.xml配置redis依赖 <!-- redis客户端代码 --> <dependency> <groupId>org.springframework. ...
- ListView的HeaderView包含的GridView滑动隐藏后无法点击问题分析
目录 1 现象 2 问题分析 2.1 滑动前 2.2 滑动后 2.3 mDataChanged赋值为true的位置 2.3 GridView直接作为ListView的HeaderView为什么可以滑动 ...
- android intent-filter 注册网页链接打开app
如下实现注册m.hao123.com的链接: <intent-filter><category android:name="android.intent.category. ...
- Python_图解教程
说明:本教程用图片+源码讲解Python常见的问题,共勉! 1.Python包的调用 # coding:utf8 # from pakge.mymodel import test from bao ...
- Python_进程process 与 线程thread
进程process 与 线程thread 的区别 各个进程独立使用内存空间,(默认)不可互相访问,线程共享内存 进程的子进程是复制一份父进程,线程没有
- v-echarts安装
npm install v-echarts echarts --save
- 详细了解IDM的“计划任务”功能
今天我们一起来看看IDM下载器的"计划任务"功能. IDM是什么就不多说了,只需要知道它是一个十分好用的资源下载器就行了,下载速度非常快,搭配一些浏览器扩展程序甚至能加速百度盘的下 ...
- O - Matching 题解(状压dp)
题目链接 题目大意 给你一个方形矩阵mp,边长为n(n<=21) 有n个男生和女生,如果\(mp[i][j]=1\) 代表第i个男生可以和第j个女生配对 问有多少种两两配对的方式,使得所有男生和 ...
- idea2020安装破解教程
申明:本教程 IntelliJ IDEA 破解补丁.激活码均收集于网络,请勿商用,仅供个人学习使用 不花钱 的方式 IDEA 2020.2 激活到 2089 年 idea官网下载安装包:https:/ ...
- LinuxKernel(一)
首先,回顾一下基础的宏操作: C语言宏 #与## #的作用是字符串化:在一个宏中的参数前面使用一个#,预处理器会把这个参数转换为一个字符数组 #define ERROR_LOG(info) fprin ...