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 更面向服务化 ...
随机推荐
- ceph bluestore的db分区应该预留多大的空间
前言 关于bluestore的db应该预留多少空间,网上有很多资料 如果采用默认的 write_buffer_size=268435456 大小的话 那么几个rocksdb的数据等级是 L0: in ...
- SpringAop切面实现日志记录
SpringAop切面实现日志记录代码实现:https://www.cnblogs.com/wenjunwei/p/9639909.html 问题记录 1.signature.getMethod(). ...
- “三剑客”之sed手中有剑
一.sed介绍 sed是Stream Editor(字符流编辑器)的缩写,简称流编辑器.sed是操作.过滤和转换文本内容的强大工具.常用功能包括对文件实现快速增删改查(增加.删除.修改.查询),其中查 ...
- 使用Feign发送HTTP请求
使用Feign发送HTTP请求 在往常的 HTTP 调用中,一直都是使用的官方提供的 RestTemplate 来进行远程调用,该调用方式将组装代码冗余到正常业务代码中,不够优雅,因此在接触到 Fei ...
- Mac系统应该用什么软件进行清理?
作为一枚资深的Windows系统使用者,小编刚刚转向Mac系统的怀抱时,各种不适应,Windows系统中普遍使用的360清理软件目前暂时没有Mac版本的,这就让小编很是头疼了,大家的Mac都是用的什么 ...
- ABBYY FineReader 15高级转换功能详解
ABBYY FineReader 15(Windows系统)OCR文字识别软件拥有强大的OCR项目功能,能帮助用户检查识别区域.验证识别出的文本.预处理图像以提高 OCR精确性等等.其强大的OCR微调 ...
- GIF图保存下来不会动?用Folx的浏览器捕获下载功能试试!
表情包大多是GIF格式的动图,有时候使用浏览器的另存为保存完发现并不能动态播放,怎么办呢?试试Folx提供的浏览器捕获下载功能,就能将各种格式的图片,包括GIF动图的下载链接捕获下来,供进一步下载使用 ...
- mycat分片及主从(二)
一.mycat分片规则 经过上一篇幅讲解,应该很清楚分片规则配置文件rule.xml位于$MYCAT_HOME/conf目录,它定义了所有拆分表的规则.在使用过程中可以灵活使用不同的分片算法,或者对同 ...
- Java基础教程——Java简介
Java是SUN公司1995年推出的一门高级编程语言,是一种面向Internet的编程语言,随着Java技术在Web方面的不断成熟,已经成为Web应用程序的首选开发语言. (2009年SUN公司被Or ...
- 变更mysql的数据类型兼容小数测试
来吧 我也没想到有一天要做这个测试: 想分为这几步吧: 1.先看看mysql本身支不支持数据的变更 2.再看看mybatis能不能用int接受double和decimal 先看下mysql: alte ...