在Spring-Boot项目开发中,存在着本模块的代码需要访问外面模块接口,或外部url链接的需求。针对这一需求以前的做法就是访问外部请求都要经过httpClient 需要专门写一个方法,来发送http请求,这个就不说了,网上一搜全都是现成的方法。springboot 实现外部http请求 是通过FeignClient来请求http数据的,特别简单并且非常实用的一个注解就可以搞定。
采用Feign进行消费
第一步:在maven项目中添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
第二步:编写接口,放置在service层
@FeignClient(url="${crm.server.url}",name="crmServer")
public interface naturalVisitCustomerService {
@RequestMapping(value = "/view/naturalVisit/addNaturalVisitCustomer",method = RequestMethod.POST)
public JSONObject saveCustomer(@RequestParam("customerName") String customerName, @RequestParam("customerPhone") String customerPhone,
@RequestParam("source") String source, @RequestParam("intention") String intention);
}
这里的crm.server.url 是配置在properties配置文件中的 结构是ip地址和端口号
crm.server.url = https://devcrm.yijia.com:5555
/view/naturalVisit/addNaturalVisitCustomer 是接口名字
第三步:要在启动的java类上加 @EnableFeignClients这个注解
@SpringBootApplication(exclude = PageHelperAutoConfiguration.class)
@MapperScan("com.yijia.website.module.*.dao")
@EnableTransactionManagement
@EnableCaching
@EnableRedisHttpSession
@EnableFeignClients
public class CmsApplication {
public static void main(String[] args){
SpringApplication.run(CmsApplication.class, args);
}
}
第四步:在需要调用的地方调用刚刚写的接口
@ResponseBody
@RequestMapping("/saveQuote")
public String saveQuoteInfo(Quote quote){
quote.setCreateTime(new Date());
if (quote.getQuoteId() != null){
return quoteService.updateQuote(quote);
}
addCustomerToCRM(quote);
return quoteService.saveQuote(quote);
}
// 新加入的方法,专门用于调用刚刚写的放入到service层的接口
private void addCustomerToCRM(Quote quote) {
String customerName = Optional
.ofNullable(quote.getCustomerName())
.orElse("自然到访客户");
try{
JSONObject result = naturalVisitCustomerService.saveCustomer(customerName, quote.getCustomerPhone(), CmsConst.SITE, CmsConst.CONSUMER);
log.info("自然到访客户接口 保存客户 结果 === {}",result.toString());
}catch (Exception e){
log.error("自然到访客户接口 保存客户 异常 === {}",e.getMessage());
}
}