以下面post请求为栗子
使用RestTemplate 请求需要TOKEN认证的接口:
//请求参数
MultiValueMap<String, String> requestBody = new LinkedMultiValueMap<>();
requestBody.add("param1","dsdd");
requestBody.add("param2","3453465");
//设置请求头
org.springframework.http.HttpHeaders headers = new org.springframework.http.HttpHeaders();
headers.set(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded; charset=utf-8");
//添加token认证
headers.set(HttpHeaders.AUTHORIZATION, "Bearer 12e3d012-783c-4650-9eb9-f8e2bdedfd8b");
HttpEntity<MultiValueMap> httpEntity = new HttpEntity<MultiValueMap>(requestBody,headers);
JSONObject json = restTemplate.postForObject("https://xxx/xxx/xxx", httpEntity, JSONObject.class);
这个时候就会出现 org.springframework.web.client.HttpClientErrorException: 401 null
原因在于调用的方法不对,不能调用postForObject(其他GET等等一样),这个方法的验证信息是不起作用的,具体原因请看官方文档,
正确的操作姿势:
JSONObject json = restTemplate.exchange("https://xxx/xxx/xxx",HttpMethod.POST,httpEntity,JSONObject.class, new Object[]{}).getBody();
到此,问题解决。
调用 restTemplate.exchange()方法,token认证信息有效。