Spring cloud 通过feign 可以来调用其他微服务的api具体用法
@EnableFeignClients // 开启fegin客户端
@SpringBootApplication
public class MongodbApiApplication {
publicstaticvoid main(String[] args) {
SpringApplication.run(MongodbApiApplication.class, args);
}
}
// @FeignClient value=调用的服务的名字 fallback=熔断器的类
@FeignClient(value = "mongodb",fallback = MongodbHystrix.class)
publicinterfaceMongodbApi {
@RequestMapping(name = "/findById",method = RequestMethod.POST)
public Object findById(@RequestParam Map
get请求每个方法参数都默认有@RequestParam 这个注解 ,最好指定value的值参数如果时对象需要@requestBody 这个注解每个方法最多只能传递一个对象,如果需要传递多个对象就需要用map来传递.
Post请求, 传递map必须是post请求如上 对象必须是post请求 @requestBody 修饰
RequestParam实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。 @RequestParam get post 方法都可以用
用map 传递对象的一些坑
1.通过feign 用map传递对像接受到对象之后对象自动转成String(json)
类型,如果需要class的信息可以通过反射获取;
2.通过map 传递基本数据类型 接受的时候也会变成 String类型,如果需要类型可以在map的key中做标识
Fegin 传递多媒体文件
@FeignClient(value = "fastdfs", configuration = FeignMultipartSupportConfig.class)
public interface FastDFSApi {
@RequestMapping(value = "/uploadImage", method = RequestMethod.POST, produces = {
MediaType.APPLICATION_JSON_UTF8_VALUE }, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String uploadImageAndCrtThumbImage(@RequestPart MultipartFile multipartFile);
@Configuration
public class FeignMultipartSupportConfig {
@Bean
@Primary
@Scope("prototype")
public Encoder multipartFormEncoder() {
return new SpringFormEncoder();
}
@Bean
public feign.Logger.Level multipartLoggerLevel() {
return feign.Logger.Level.FULL;
}
}