spring发送 content-type=application/x-www-form-urlencoded 和普通请求不太一样。
试了好多方式,最后用以下方式成功:
@FeignClient(
name = "ocr-api",
url = "${orc.idcard-url}",
fallbackFactory = OcrClientFallbackFactory.class
)
public interface OcrClient {
@PostMapping(
value = "/v1/demo/idcard",
headers = {"content-type=application/x-www-form-urlencoded"}
)
OcrBaseResponse<IdCardResponse> getIdCarInfo(@RequestBody MultiValueMap<String, Object> request);
}
Post请求,参数使用@RequestBody 并且使用 MultiValueMap。
// 测试代码
@Resource
private OcrClient ocrClient;
@GetMapping("getIdCardInfo")
public Message getIdCardInfo() {
MultiValueMap<String, Object> req = new LinkedMultiValueMap<>();
req.add("request_id", 12343531123L);
req.add("img_url", "xxx.jpg");
req.add("source", -1);
req.add("out_business_id", 1321434234L);
OcrBaseResponse<IdCardResponse> idCarInfo = ocrClient.getIdCarInfo(req);
return Message.success(idCarInfo);
}