1. FEIGN 常见问题
1.1 400 Bad Request 问题
1.1.1 问题描述
在使用feign调用的使用出现400 Bad request的问题。
1.2.2 代码如下
@PostMapping("/system/core/sysMenu/getMenusByIdsAndTypes")
List<SysMenuDto> getMenusByIdsAndTypes(@RequestParam("menuIds") String menuIds,
@RequestParam("menuType") String menuType);
这个 menuIds 数量比较多,导致400 错误。发现问题出在menuIds 跟在URL后面。
1.1.3 解决办法
将方法修改为:
List<SysMenuDto> getMenusByIdsAndTypes(@RequestBody MultiValueMap<String,String> queryParam);
调用方法修改成:
public List<SysMenuDto> getMenusByIdsAndNotType(String menuIds, String menuType){
MultiValueMap valueMap=new LinkedMultiValueMap();
valueMap.add("menuIds",menuIds);
valueMap.add("menuType",menuType);
return systemClient.getMenusByIdsAndTypes(valueMap);
}
1.2. 非法字符错误
1.2.1 错误信息
在流程调用表单接口的时候抛出如下的错误。
Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens
1.2.2 错误原因
是feign 调用的时候启用了压缩。
1.2.3 解决办法
关闭压缩即可。
将配置改成:
feign.compression.request.enabled=false
feign.compression.response.enabled=false
1.3. 字符串中文乱码问题
1.3.1 错误信息
在Feign调用时,传到目标服务的方法中,字符串里的中文变成问号了
1.3.2 解决办法
在Feign的接口的注解中指定consumes字符集:
@PostMapping(value = "/portal/core/appdata/install",consumes = "application/json;charset=UTF-8")
void install(@RequestBody String data);
如果此时data为”[{},{}]”格式的JSON字符串,即JSON数组字符串,又会报参数类型不匹配的错误,要把参数改为对象数组或者List对象:
@PostMapping(value = "/portal/core/appdata/install",consumes = "application/json;charset=UTF-8")
void install(@RequestBody Object[] data);
文档更新时间: 2022-03-12 14:35 作者:zyg