Spring Cloud下使用Feign Form实现微服务之间的文件上传 (2)

方法可以使用类似Controller中的一些注解,比如方法上可以加@RequestMapping,@PostMapping等,类上面不可以加,我试的时候,在class上加了@RequestMapping之后报错,项目启动时候显示Url报错,其实,也完全不需要加

接受文件的时候,必须是@RequestPart注解,我曾经看有文章说,@RequestPart和@RequestParam通用,但是我自己测试并不是这样

consumes对应请求的contentType,必须为:multipart/form-data,此处使用了静态导包。

在传统Controller中,我本身会经常简写@RequestParam,忽略他的value字段。但是Feign接口中不行,如果这些注解没有括号中的value那么就会报错

不支持@RequestBody注解

provider-server

这个项目是最后实际提供服务的项目,所以必须实现provider-api接口中的方法,并且注册到eureka服务中。

添加对feign的依赖,添加api项目的依赖,其他依赖略

compile project(":provider-api") "org.springframework.cloud:spring-cloud-starter-feign:$feignVersion"

实现provider-api中ProviderClient接口,生成实现类,并编写业务代码,需要注意两点

因为父级已经在方法上增加了@PostMapping,此处可以省略

如果是通过IDEA快生成的实现类,那么参数前面的@RequestPart、@RequestParam的注解需要加上,不然报错

consumer-server

这个项目是消费对方提供服务的项目,需要做的也比较简单。

添加provider-api的项目依赖,正式环境下,两个项目可能是不同组开发的,所以需要引入jar包,而不是直接编译此工程,这里仅做展示使用

compile project(":provider-api")

在启动类上增加注解,扫描添加Feign功能对应的包

@SpringCloudApplication // 这个注解非常重要,不然引用不到client中的方法 @EnableFeignClients("com.shiyajian.examples.provider") public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class); } }

在需要的地方通过@Autowird方式注入,然后就可以进行调用了

@Autowired ProviderClient providerClient; …… providerClient.dosomething(); ……

总结

​ 整个通过Feign-Form上传文件的案例就写完了,第一次写博客,写的不好还望见谅,如果文章解释的不够清楚,可以参考我的项目中的代码,代码上可能会更清晰点,代码我已经测试通过的,可以放心使用。文章中如果有写错误的地方还望各位指正,当然,如果有什么好的建议也可以给我评论和留言,如果你还其他关于java方面的教程和示例代码你也可以告诉我,我如果不忙的时候,我就会写出来。

意外

​ 在发文章之前又做了一次测试,这次测试没有通过,通过调查发现,Eureka中项目的注册地址变成了:MacBook-Pro.local:provider-server:8100,然后调用时候就发生url错误,请求fe80:0:0:0:***:8100这个地址,等重新联网之后再次启动,注册地址就变成 192.168.1.101这种地址。

文章发布在github上没有问题,在园子里面出现了格式BUG,调了好长时间没调好, 就先这样将就着看吧。猜测原因是小标题后面带个代码块样式就被顶跑了,但是不知道怎么处理,刚开始用Markdown,以后再研究吧,见谅见谅。 其他

​ QQ群:757696438是我的个人好友群,目前也就30来个人,主要就是吹牛侃大山,顺便学习技术共同进步。欢迎各种浪的飞起、闷骚到爆的同志来玩,但是不欢迎装逼的。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzxdxg.html