spring cloud:feign 使用form表单 POST数据
问题来源:调用接口发现以POST请求form表单发送数据
这是要调的接口:
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
参考:
https://github.com/OpenFeign/feign-form
https://blog.csdn.net/andy_zhang2007/article/details/87860407