收到一个api文档接口,调用起来跟常规有些不同。需要再url上传参,还要在body传参。真是第一次见识到,参数都是json格式,也不知道这样设计的初衷是啥?接到了就干呗。
直接在url上拼接参数,
https://xx?object=[{"createdBy":"one","createdDate":"2019-11-14 14:17:37","p
rice":"888888888"]
省略 json参数
然后执行直接抛出异常了 java.lang.IllegalArgumentException: Not enough variable values available to expand '"createdBy"'
真是蛋疼了,只能去查资料了。
@Override
public <T> T execute(String url, HttpMethod method, RequestCallback requestCallback,
ResponseExtractor<T> responseExtractor, Object... urlVariables) throws RestClientException {
// 这里进行网络转码,因为我们传递的URL是字符串,最后都要统一转为URL,而且对于字符都应该进行网络编码,
// 问题就出现在这里,我们如果自己手动把参数进行网络编码,那么问题就不会出现
URI expanded = getUriTemplateHandler().expand(url, urlVariables);
return doExecute(expanded, method, requestCallback, responseExtractor);
}
可以尝试spring 提供的url处理
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(SPEKTRA_REJECTED_API_ORDERINFO_URL);
builder.queryParam("object", "["+JSON.toJSONString(obj)+"]");
搞定,mark一下。参考资料https://my.oschina.net/heweipo/blog/704595