示例如下:
@FeignClient("service-resource")
//@RequestMapping("/api/test")
public interface TestResourceItg {
@RequestMapping(value = "/api/test/raw", method = RequestMethod.POST, consumes = "application/x-www-form-urlencoded")
public String raw1(@PathVariable("subject") String subject, // 标题
@RequestParam("content") String content); // 内容
}
//@RequestMapping("/api/test")
public interface TestResourceItg {
@RequestMapping(value = "/api/test/raw", method = RequestMethod.POST, consumes = "application/x-www-form-urlencoded")
public String raw1(@PathVariable("subject") String subject, // 标题
@RequestParam("content") String content); // 内容
}
说明:
*使用RequestMapping中的consumes指定生成的请求的Content-Type
*RequestParam指定的参数会拼接在URL之后,如: ?name=xxx&age=18
*PathVariable指定的参数会放到一个LinkedHashMap<String, ?>传入到feign的Encoder中进行处理,而在Spring中实现了该接口的Encoder为SpringEncoder,而该实现又会使用Spring中的HttpMessageConverter进行请求体的写入。
坑:
*不要在接口类名上使用RequestMapping,虽然可以使用,但同时SpringMVC会把该接口的实例当作Controller开放出去,这个可以在启动的Mapping日志中查看到
*使用默认的SpringEncoder,在不指定consumes时,PathVariable中的参数会生成JSON字符串发送,且默认情况下不支持Form表单的生成方式,原因为:FormHttpMessageConverter只能处理MultiValueMap,而使用PathVariable参数被放在了HashMap中。默认更不支持文件上传。其实已经有支持处理各种情况的HttpMessageConverter存在。
填坑:
*支持Form表单提交:只需要编写一个支持Map的FormHttpMessageConverter即可,内部可调用FormHttpMessageConverter的方法简化操作。
*支持文件上传:只需要把要上传的文件封装成一个Resource(该Resource一定要实现filename接口,这个是把请求参数解析成文件的标识),使用默认的ResourceHttpMessageConverter处理即可。
*支持处理MultipartFile参数:编写一个支持MultipartFile的MultipartFileHttpMessageConverter即可,内部可调用ResourceHttpMessageConverter实现,同时注意需要将其添加至FormHttpMessageConverter的Parts中,并重写FormHttpMessageConverter的getFilename方法支持从MultipartFile中获取filename
*所有的HttpMessageConverter直接以@Bean的方式生成即可,spring会自动识别添加
完美支持表单和文件上传:
方案一:
使用附件中的MapFormHttpMessageConverter.java和MultipartFileHttpMessageConverter.java
在Spring中进行如下配置即可
@Bean
public MapFormHttpMessageConverter mapFormHttpMessageConverter(MultipartFileHttpMessageConverter multipartFileHttpMessageConverter) {
MapFormHttpMessageConverter mapFormHttpMessageConverter = new MapFormHttpMessageConverter();
mapFormHttpMessageConverter.addPartConverter(multipartFileHttpMessageConverter);
return mapFormHttpMessageConverter;
}
@Bean
public MultipartFileHttpMessageConverter multipartFileHttpMessageConverter() {
return new MultipartFileHttpMessageConverter();
}
public MapFormHttpMessageConverter mapFormHttpMessageConverter(MultipartFileHttpMessageConverter multipartFileHttpMessageConverter) {
MapFormHttpMessageConverter mapFormHttpMessageConverter = new MapFormHttpMessageConverter();
mapFormHttpMessageConverter.addPartConverter(multipartFileHttpMessageConverter);
return mapFormHttpMessageConverter;
}
@Bean
public MultipartFileHttpMessageConverter multipartFileHttpMessageConverter() {
return new MultipartFileHttpMessageConverter();
}
方案二:
使用FeignSpringFormEncoder.java
在Spring中配置如下:
@Bean public Encoder feignEncoder(ObjectFactory<HttpMessageConverters> messageConverters) { return new FeignSpringFormEncoder(messageConverters); }
推荐使用方案一
方案二为参考https://github.com/pcan/feign-client-test而来,未测
相关推荐
在本项目"spring-cloud-user-feign.zip"中,我们探讨的是如何在Spring Cloud框架下实现服务间的调用,特别是利用Feign客户端进行微服务通信。这个压缩包包含了四个关键组件,分别是: 1. spring-cloud-gateways:这...
赠送jar包:feign-form-spring-3.8.0.jar; 赠送原API文档:feign-form-spring-3.8.0-javadoc.jar; 赠送源代码:feign-form-spring-3.8.0-sources.jar; 赠送Maven依赖信息文件:feign-form-spring-3.8.0.pom; ...
springcloud整合openFeign,包括feign的基本使用、传参、指定特定的服务器、负载均衡等使用方法。...springcloud-feign-api springcloud-feign-consumer springcloud-feign-provider springcloud-feign-providerV2
下面我们将详细探讨如何在Spring Cloud中使用Feign,以及涉及到的相关知识点。 首先,我们要了解Feign的基本概念。Feign是一个构建在HTTP客户端之上的声明式Web服务客户端,它使得编写Web服务客户端就像编写服务器...
然后,"SpringCloud-2.0-order-hystrix-feign-8012"展示了如何使用Feign和Hystrix进行服务间调用。Feign是一个声明式Web服务客户端,使得编写Web服务客户端就像编写Java接口一样简单。在Order服务中,我们可以定义一...
在本文中,我们将深入探讨如何使用 Feign,并了解其与 Spring Cloud 结合的工作原理。 首先,要在主应用类中启用 Feign,你需要添加 `@EnableFeignClients` 注解。这会告诉 Spring 扫描并创建 Feign 客户端实例,...
5. **依赖管理**:在`pom.xml`中,引入了Spring Cloud的相关依赖,如`spring-cloud-starter-openfeign`, `spring-cloud-starter-netflix-eureka-client`等。 在实际开发中,开发者可以按照以下步骤使用Feign实现...
除了Feign自带的注解外它还支持JAX-RS注解,SpringCloud又为Feign增加了对SpringMVC注解的支持,同时为了能够使用和Spring Web中默认使用的相同的httpMessageConverter,SpringCloud集成了Ribbon和Eureka,用来在...
而`spring-cloud-alibaba-demo-user`则为服务消费者,通过Feign接口调用`spring-cloud-alibaba-nacos`中的服务。 在实际开发中,我们还需要注意以下几点: 1. 服务消费者通过Nacos获取服务提供者的元数据,包括服务...
1. 添加依赖:在项目的`pom.xml`文件中引入SpringCloud的Eureka相关依赖。 2. 配置Eureka Server:在`application.yml`或`application.properties`中配置Eureka Server的相关属性,如端口、名称等。 3. 配置服务...
SpringCloud中关于Feign的常见问题总结,包括常用的请求注解、@PathVariable、FeignClient多参数的构造等
javaweb/javaee 常用jar包,亲测可用,若需其他版本其他jar包请留言我看到后会上传分享
javaweb/javaee 常用jar包,亲测可用,若需其他版本其他jar包请留言我看到后会上传分享
javaweb/javaee 常用jar包,亲测可用,若需其他版本其他jar包请留言我看到后会上传分享
在 application.yml 文件中,我们需要配置 application name 为 feign-service。然后,我们需要在 FeignServiceApplication 类上添加 @EnableFeignClients 注解,以启用 Feign 客户端。 接下来,我们需要创建一个...
在微服务架构中, token验证是非常重要的安全机制之一,本文将主要介绍如何使用Spring Cloud Feign统一设置验证token实现方法解析。 首先,我们需要了解Feign组件的工作机制。Feign组件是一个基于Annotation的接口...
Spring Cloud Netflix是Spring Cloud项目的一部分,它提供了在分布式系统中实现常见模式的工具集,其核心功能之一是服务发现。在文档中,首先介绍了Eureka客户端,即服务注册与发现机制中的客户端组件。Eureka客户端...
本示例以"spring-cloud-alibaba-nacos-feign-sentinel.zip"为核心,旨在展示如何将Nacos用于服务注册与发现,Feign实现服务间的无侵入调用,以及Sentinel作为流控防护屏障,构建一个高效且稳定的微服务体系。...
该项目采用 study-springcloud-root作为maven父项目,其余项目作为子项目的方式搭建。 eureka用户服务注册,config用于服务注册,config-client作为客户端注册,通过ribbon实现了客户端访问study-springcloud-...