restTemple访问http请求报错

一、先用postman发送请求看是否成功。如果不成功,可能对方服务器做限制,则试试在httpHeader添加user-agent。

二、检查url中是否有特殊字符需要保留的。比如 空格,&,% 等都会在被 restTemple执行的时候进行URLencode。

public  T execute(String url, HttpMethod method, @Nullable RequestCallback requestCallback,
			@Nullable ResponseExtractor 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  vo = restTemplate.getForObject(uri, ResultVO.class);


你可能感兴趣的:(问题汇总)