spring cloud:feign 使用form表单 POST数据
这是要调的接口: FelignClient 如下:
@Component @FeignClient(value = "oms", url = "${rbox.after-sales-order.feign.url.oms}", fallback = AsOrderReasonFeignClientFallback.class, configuration = FeignClientFormPostConfig.class) public interface AsOrderReasonFeignClient { @PostMapping(value = "/v0.2/as_aftersales/get_reason_address", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) ServerResponse getReasonAddress(Map<String, ?> userId); }
注册FeignClientFormEncoderCofig 组件应用上下文:
@Component public class FeignClientFormPostConfig { // 这里会由容器自动注入HttpMessageConverters的对象工厂 @Autowired private ObjectFactory<HttpMessageConverters> messageConverters; /** * new一个form编码器,实现支持form表单提交 */ @Bean Encoder feignFormEncoder(ObjectFactory<HttpMessageConverters> converters) { return new SpringFormEncoder(new SpringEncoder(converters)); } }
添加依赖:
<dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form-spring</artifactId> <version>3.3.0</version> </dependency>
注:
- @PostMapping注解使用属性 consumes = {MediaType.MULTIPART_FORM_DATA_VALUE},
- 参数使用Map<String, ?>形式 而不是@RequestParam(name = "user_id")Integer id 参考: