UriComponentsBuilder和UriComponents url编码

Posted 47gamer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UriComponentsBuilder和UriComponents url编码相关的知识,希望对你有一定的参考价值。

Spring MVC 提供了一种机制,可以构造和编码URI -- 使用UriComponentsBuilder和UriComponents。

功能相当于 urlencode()函数,对url进行编码, 但同时还支持变量替换。

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

嗯,expand()是用于替换所有的模板变量,encode默认使用UTF8编码。

注意,UriComponents是不可变的,expand()和encode()都是返回新的实例。

你还可以这样做:

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

 在Servlet环境中,使用子类ServletUriComponentsBuilder提供的静态工厂方法可以从一个Servlet request中获取有用的URI信息:

HttpServletRequest request = ...
 
// Re-use host, scheme, port, path and query string
// Replace the "accountId" query param
 
ServletUriComponentsBuilder ucb = ServletUriComponentsBuilder.fromRequest(request)
        .replaceQueryParam("accountId", "{id}").build()
        .expand("123")
        .encode();

 

以上是关于UriComponentsBuilder和UriComponents url编码的主要内容,如果未能解决你的问题,请参考以下文章

RestTemplate之GET和POST调用和异步回调

eclipse中struts.xml中不自动提示

spring restTemplate 用法

根据 RFC 3986 的无效 URI 示例

Spring怎么又 bug 了,响应结果居然乱码了?

java.lang.IllegalStateException: No instances www.xxxx.com available for localhost