一、先用postman发送请求看是否成功。如果不成功,可能对方服务器做限制,则试试在httpHeader添加user-agent。
二、检查url中是否有特殊字符需要保留的。比如 空格,&,% 等都会在被 restTemple执行的时候进行URLencode。
public <T> T execute(String url, HttpMethod method, @Nullable RequestCallback requestCallback,
@Nullable ResponseExtractor<T> responseExtractor, Object... uriVariables) throws RestClientException {
//这里会对url进行urlencode编码
URI expanded = getUriTemplateHandler().expand(url, uriVariables);
return doExecute(expanded, method, requestCallback, responseExtractor);
}
三、先检查你的url是否urlencode过。。restTemple默认会执行一遍URLencode,如果之前url包含特殊字符, 编码两边会导致最后生成的uri不一致。稳妥的办法是自己先根据url生成uri,这样restTemple就不会进行urlencode;
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url);
URI uri = builder.build().encode().toUri();
System.out.println("uri:"+uri);
ResultVO<NowWeatherVO> vo = restTemplate.getForObject(uri, ResultVO.class);