RestTemplate header 认证 401问题

以下面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认证信息有效。

要设置RestTemplateheader,可以按照以下步骤进行: 1. 首先,导入需要的包: import org.springframework.http.HttpHeaders; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; 2. 创建一个HttpHeaders对象,并设置需要的header信息: HttpHeaders headers = new HttpHeaders(); headers.set("user-agent", ""); // 设置user-agent headers.set("X-Requested-With", "XMLHttpRequest"); // 设置X-Requested-With 3. 创建一个HttpEntity对象,并将headers设置为其的参数: HttpEntity entity = new HttpEntity(headers); 4. 使用exchange方法发送请求并获取返回数据: ResponseEntity<JSONObject> response = restTemplate.exchange("URL", HttpMethod.GET, entity, JSONObject.class); 5. 通过response获取返回的数据: JSONObject jsonObject = response.getBody(); 下面是一个完整的示例代码: ```java import org.springframework.http.HttpHeaders; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; import com.alibaba.fastjson.JSONObject; RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.set("user-agent", ""); headers.set("X-Requested-With", "XMLHttpRequest"); HttpEntity entity = new HttpEntity(headers); ResponseEntity<JSONObject> response = restTemplate.exchange("URL", HttpMethod.GET, entity, JSONObject.class); JSONObject jsonObject = response.getBody(); System.out.println(jsonObject); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值