使用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使用注意事项的更多相关文章

  1. springcloud-feign组件实现声明式的调用

    11.使用feign实现声明式的调用 使用RestTemplate+ribbon已经可以完成对服务端负载均衡的调用,为什么还要使用feign? @RequestMapping("/hi&qu ...

  2. springcloud应用思考

    1 springcloud注册中心eureka和zookeeper注册中心的区别: eureka注册中心,在服务选主的时候服务还是可以用的,zookeeper注册中心在选举的时候整个服务瘫痪了,是不可 ...

  3. Feign性能优化注意事项

    一.FeignClient注解 FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上 @FeignClient(name ...

  4. Feign 注意事项

    一.FeignClient注解 FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上 1 2 3 4 5 @FeignC ...

  5. Feign性能优化注意事项--超时

      Caused by: java.lang.IllegalStateException: PathVariable annotation was empty on param 1. at feign ...

  6. feign调用过程注意事项

    Feign是Netflix开发的声明式.模板化的HTTP客户端, Feign可以帮助我们更快捷.优雅地调用HTTP API. 在Spring Cloud中,使用Feign非常简单——创建一个接口,并在 ...

  7. 在dropwizard中使用feign,使用hystrix

    前言 用惯了spring全家桶之后,试试dropwizard的Hello World也别有一帆风味.为了增强对外访问API的能力,需要引入open feign.这里简单在dropwizard中使用fe ...

  8. 不使用SpringBoot如何将原生Feign集成到Spring中来简化http调用

    在微服务架构中,如果使用得是SpringCloud,那么只需要集成SpringFeign就可以了,SpringFeign可以很友好的帮我们进行服务请求,对象解析等工作. 然而SpingCloud是依赖 ...

  9. Spring Cloud 组件 —— feign

    feign 作为一个声明式的 Http Client 开源项目.在微服务领域,相比于传统的 apache httpclient 与在 spring 中较为活跃的 RestTemplate 更面向服务化 ...

随机推荐

  1. ceph osd tree的可视化

    前言 很久没有处理很大的集群,在接触一个新集群的时候,如果集群足够大,需要比较长的时间才能去理解这个集群的结构,而直接去看ceph osd tree的结果,当然是可以的,这里是把osd tree的结构 ...

  2. Go语言配置管理神器——Viper中文教程

    Viper是适用于Go应用程序的完整配置解决方案.它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式. Viper Viper是适用于Go应用程序的完整配置解决方案.它被设计用于在应用 ...

  3. Linux_Python版本控制

    第1步:更新gcc,因为gcc版本太老会导致新版本python包编译不成功 复制代码代码如下: yum -y install gcc 系统会自动下载并安装或更新,等它自己结束 第2步:安装wget,这 ...

  4. oracle 11.2.0.4静默安装

    oracle 11.2.0.4静默安装 1.安装包 1.1.上传安装包 xshell可用rz命令,选择安装包. mobaxterm可用左侧栏上传功能. 2.安装准备 2.1.关闭防火墙.SELinux ...

  5. Avoided redundant navigation to current location: "/users"

    问题产生的原因:在Vue导航菜单中,重复点击一个菜单,即重复触发一个相同的路由,会报错,但不影响功能 解决:在router的配置文件中加入如下代码: const originalPush = Rout ...

  6. Android10_原理机制系列_Android消息机制(Handler)详述

    概述 在Android中的多进程.多线程中提过,只有主线程(UI线程)可以更新UI,其他线程不可以,所以一般耗时操作放到子线程.子线程可以通过Handler将相关信息通知到主线程. Android的消 ...

  7. 20-SAP PI开发手册-ERP发布服务供外部系统调用(sproxy代理类)

    一.      接口内容 接口详细信息 1.  字段对应关系 发送字段对应关系 返回字段对应关系 2.  报文信息 传入报文(报文结构,外围系统提供) 1 <?xml version=" ...

  8. 如何在PDF文档上加水印

    当我们需要传输一些比较重要的文件时,往往会选择将文档转换为PDF文件,避免其他人复制.更改文档的内容. pdfFactory不仅可以为用户提供快速创建PDF的功能,同时还提供了添加水印的功能.有了水印 ...

  9. 在FL Studio中如何做出渐入的人声效果

    当我们在拿到一段人声并想把它加入歌曲中时,如果我们发现人声没有渐入的效果,直接加入到歌曲里出现会变得很突兀的话,我们就需要用到这篇文章所介绍的方法,给人声加上一个渐入的效果. 1. 找到我们需要处理的 ...

  10. leetcode 108 和leetcode 109 II

    //感想:没啥上篇写完了 //思路:对于这道题109来说,就是数组变成了链表,其他没有变,我觉得非常不解,因为我想到的依旧是找中点,用快慢指针来找, 找到以后将链表分成两半,继续递归的去找,我就觉得这 ...