问题发现场景
原fegin的代码如下
@FeignClient(value = "zz-atexpress",contextId = "AtExpressClient")
public interface AtExpressClient {
//@ApiOperation("获取at公式的值")
@PostMapping("/zzAtexpress/exeuteAtExpress")
ResultInfo exeuteAtExpress(@RequestParam String processInstId
, @RequestParam String taskId, @RequestParam String atExpress);
}
这样 当我传递的值atExpress=aaa&token=@token时 那么fegin就会把参数拼接在url后面导致
实际atExpress接收到的值是aaa 而不是aaa&token=@token
参数带@RequestParam的都会拼接在url后面 不管是post还是get contenttype值是否其他的任何值
解决办法如下
@FeignClient(value = "zz-atexpress",contextId = "AtExpressClient")
public interface AtExpressClient {
//这样可以 但是要组装map
@PostMapping("/zzAtexpress/exeuteAtExpress")
ResultInfo exeuteAtExpress(@SpringQueryMap Map<String,?> param);
}
这样 调用之前 要组装map ,但是参数不会拼接在url之后导致 接收参数错误
或者修改接收参数为@requestBody 也可以
据说以下方式不用修改接收参数端的代码 也能解决 但并未尝试 先贴出来
//feign接口写法
@RequestMapping(value = "/task/taskcenter/addTask", method = RequestMethod.POST)
Result<?> addTaskMap(@RequestBody MultiValueMap<String, String> queryParam);
//业务代码中调用方法:此处的value可以使用Object类型的
MultiValueMap paramMap = new LinkedMultiValueMap<String, String>();
paramMap.add("taskContent", taskContent);
paramMap.add("taskTitle", taskTitle);
//feign调用
Result<?> result = taskFeign.addTaskMap(paramMap);