restTemplate 发起请求(带token认证,参数格式json)

这篇博客介绍了如何在Java中利用Spring的RestTemplate发送带有token认证的HTTP POST请求,同时以JSON格式传递参数。通过创建HttpHeaders,设置Authorization头并构造HttpEntity,实现了安全的数据交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

restTemplate 发起http请求,请求信息里携带token

import com.alibaba.fastjson.JSON;
import org.springframework.web.client.RestTemplate;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
/**
 * restTemplate 请求其他服务(带token认证,参数格式json)
 */
Map<String, Object> map = new HashMap<>();
map.put("key", "value");
//...组装参数
String s = JSON.toJSONString(map);
//转成json格式
JSONObject jsonObject = JSONObject.parseObject(s);
HttpHeaders headers = new HttpHeaders();
//token 是请求的token
headers.set(HttpHeaders.AUTHORIZATION, token);
headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
HttpEntity<JSONObject> entity = new HttpEntity<>(jsonObject, headers);
ResponseResult json = restTemplate.exchange("http://" + xxx+ "/xxx/xxx", HttpMethod.POST,entity,ResponseResult.class).getBody();

ResponseResult.class 是自己写的自定义类

### Java 后端调用第三方 API 需要注意的关键参数 #### URL 和 HTTP 方法 URL 是访问资源的位置标识符,必须确保准确性。HTTP 请求方法决定了对目标资源的操作类型,常见的有 GET、POST、PUT 和 DELETE 等。 ```java String url = "https://api.example.com/resource"; HttpMethod method = HttpMethod.GET; ``` #### 头部信息 (Headers) 头部信息用于传递元数据给服务器,可能影响请求处理方式或安全性验证机制。例如 Content-Type 表明请求体的内容编码格式;Authorization 则通常携带认证令牌[^1]。 ```java HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.setBearerAuth("your_token_here"); ``` #### 请求格式 (Body Format) 当使用 POST 或 PUT 发送数据时,需指定合适的 body 格式JSONRESTful 接口中最常用的数据交换格式之一。XML 也曾广泛应用于 SOAP 协议中,不过现在 JSON 更受欢迎因其简洁易读写的特点。 ```json { "key": "value", "anotherKey": ["item1", "item2"] } ``` #### 超时设置 (Timeout Settings) 网络状况不可预测,在发起远程调用前应合理配置连接超时时长以及整个响应等待的最大时限。这有助于防止因长时间无回应而阻塞应用进程的情况发生。 ```java RestTemplate restTemplate = new RestTemplate(); SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); requestFactory.setConnectTimeout(5000); // 连接超时时间设为五秒 requestFactory.setReadTimeout(30000); // 响应读取超时时间为三十秒 restTemplate.setRequestFactory(requestFactory); ResponseEntity<String> response = restTemplate.exchange(url, method, entity, String.class); ``` #### 错误处理 (Error Handling) 考虑到外部服务可能出现异常情况,应当设计良好的错误捕捉逻辑来应对各种潜在问题,如状态码解析、自定义重试策略等措施可提高系统的健壮性和用户体验感。 ```java try { ResponseEntity<String> response = restTemplate.getForEntity(url, String.class); } catch (HttpClientErrorException e) { System.err.println("Client error occurred: " + e.getStatusCode()); } catch (HttpServerErrorException e) { System.err.println("Server error occurred: " + e.getStatusCode()); } finally { // 清理工作... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值