Raj*_*ore 2 java url spring encode spring-boot
在RestTemplate.exchange()将编码的URL都无效字符,但不+作为+是有效的URL字符。但是如何+在任何 URL 的查询参数中传递 a ?
Raj*_*ore 10
如果您传递给 RestTemplate 的 URI 已将编码设置为 true,那么它将不会对您传递的 URI 执行编码,否则它将执行。
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URLEncoder;
import java.util.Collections;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.BufferingClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
class Scratch {
public static void main(String[] args) {
RestTemplate rest = new RestTemplate(
new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()));
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
headers.add("Accept", "application/json");
HttpEntity<String> requestEntity = new HttpEntity<>(headers);
UriComponentsBuilder builder = null;
try {
builder = UriComponentsBuilder.fromUriString("http://example.com/endpoint")
.queryParam("param1", URLEncoder.encode("abc+123=", "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
URI uri = builder.build(true).toUri();
ResponseEntity responseEntity = rest.exchange(uri, HttpMethod.GET, requestEntity, String.class);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果您需要在其中传递查询参数,+那么 RestTemplate 将不会将+所有其他无效的 URL 字符编码为+有效的 URL 字符。因此,您必须首先对 param ( URLEncoder.encode("abc+123=", "UTF-8"))进行编码,然后将编码的 param 传递给 RestTemplate ,说明 URI 已经使用 进行了编码builder.build(true).toUri();, wheretrue告诉 RestTemplate URI 已经编码,因此不再编码,因此+将作为%2B.
builder.build(true).toUri();
OUTPUT :http : //example.com/endpoint? param1=abc%2B123%3D 作为编码将被执行一次。builder.build().toUri();
OUTPUT :http : //example.com/endpoint? param1=abc%252B123%253D 作为编码将执行两次。| 归档时间: |
|
| 查看次数: |
5489 次 |
| 最近记录: |