一、背景
今天项目遇到一个问题,Feign实现Form表单提交,一直显示参数错误,可能就是数据传输格式有问题,使用postman调用是正常的,所以有了这篇问题,和大家分享下经验,Feign不同请求格式的写法
二、方法
一般的写法
@FeignClient(name = "ForlanApi")
public interface LiveShopClient {
@XX1Mapping(value = "yourPath")
XX3 getMoney(@RequestHeader Map<String, Object> headerMap, xx2);
}
参数说明:
- xx1表示请求方式,可以是Post和Get,分别对应@PostMapping和GetMapping
- xx2表示请求参数
- xx3表示响应内容
1、请求格式1
Content-Type=application/json
对应的Feign写法如下:
@PostMapping(value = "yourPath")
XX2 getMoney(@RequestHeader Map<String, Object> headerMap, @RequestBody XXXDTO xxx);
2、请求格式2
Content-Type=application/json
对应的Feign写法如下:
@PostMapping(value = "yourPath", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
XX2 getMoney(@RequestHeader Map<String, Object> headerMap, @RequestParam("param1") Object value1, @RequestParam("param2")Object value2);
3、请求格式3
Content-Type=application/x-www-form-urlencoded
对应的Feign写法如下:
@PostMapping(value = "yourPath", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
XX2 getMoney(@RequestHeader Map<String, Object> headerMap, MultiValueMap<String, Object> paramMap);
调用的时候,使用LinkedMultiValueMap接口,如下:
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
paramMap.add("param1", "value1");
paramMap.add("param2", "value2");
forlanClient.getMoney(paramMap);
上面这种是比较简单的写法了,网上各种增加其它注解,比如注入form编码器,然后就可以支持Map请求参数,复杂得多,而且试了还不成功,所以推荐上面这种写法