【开发心得】使用UriComponentsBuilder/UriComponents构建请求url

49 篇文章 0 订阅
12 篇文章 0 订阅

前言:

我们在与第三方接口通信的时候,经常需要http调用。不管是httpclient,okhttp,resttemplate再到更牛一些的http客户端。

地址构建与参数拼接是我们逃脱不掉的。

推荐使用 UriComponentsBuilder,包路径为:org.springframework.web.util,这个类的方法有许多,主要围绕如何构建url和传递参数来的。用来解决我们在日常生活中参数拼接的痛苦(或者拼多了,或者拼少了,或者拼错了)。

常规的例子:

UriComponents uriComponents=UriComponentsBuilder
        .fromHttpUrl("http://localhost:8080//test")
        .queryParams(params).build() //params是个Map
String uri=uriComponents.toUriString();

模板方式构建:
expand(): 替换参数。
encode(): 编码,默认使用utf-8。

UriComponents uriComponents = UriComponentsBuilder
.fromUriString("http://example.com/hotels/{hotel}/bookings/{booking}").build();
URI uri = uriComponents.expand("42", "21").encode().toUri();


注意:UriComponents是不可变的,expand()和encode()返回新的实例。
上述例子也可以这样实现:

UriComponents uriComponents = UriComponentsBuilder.newInstance()
  .scheme("http").host("example.com").path("/hotels/{hotel}/bookings/{booking}").build()
  .expand("42", "21")
  .encode();

要注意的是expand是一个可变数组的传参,并且要与前边模板写法的参数一一对应。

 


 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用RestTemplate发送GET请求的步骤如下: 1. 创建 RestTemplate 实例。 ```java RestTemplate restTemplate = new RestTemplate(); ``` 2. 使用 `getForObject()` 或 `getForEntity()` 方法发送请求并获取响应。 ```java String url = "http://example.com/api/data"; String response = restTemplate.getForObject(url, String.class); // 或者 ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class); String response = responseEntity.getBody(); ``` 其中,`getForObject()` 方法直接返回响应体,而 `getForEntity()` 方法返回一个 `ResponseEntity` 对象,包含了响应头、响应状态码等信息。 3. 可以在请求中传递参数,例如: ```java String url = "http://example.com/api/data?param1=value1&param2=value2"; String response = restTemplate.getForObject(url, String.class); ``` 也可以使用 `UriComponentsBuilder` 来构建带参数的 URL,例如: ```java UriComponents uriComponents = UriComponentsBuilder .fromUriString("http://example.com/api/data") .queryParam("param1", "value1") .queryParam("param2", "value2") .build(); String url = uriComponents.toUriString(); String response = restTemplate.getForObject(url, String.class); ``` 4. 如果需要设置请求头,可以使用 `HttpHeaders` 对象,例如: ```java HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", "Bearer " + token); headers.set("User-Agent", "Mozilla/5.0"); HttpEntity<?> entity = new HttpEntity<>(headers); String url = "http://example.com/api/data"; String response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class).getBody(); ``` 这里使用 `exchange()` 方法发送请求,并将请求头和请求体封装到 `HttpEntity` 对象中。 5. 最后别忘了处理异常情况,例如: ```java try { String url = "http://example.com/api/data"; String response = restTemplate.getForObject(url, String.class); } catch (RestClientException e) { // 处理异常 } ``` RestClientException 是 RestTemplate 发送请求时可能抛出的异常,例如网络异常、HTTP 错误等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值