[SPRING] RestTemplate은 URL을 이스케이프 처리하지 않습니다.
SPRINGRestTemplate은 URL을 이스케이프 처리하지 않습니다.
나는 Spring RestTemplate을 다음과 같이 성공적으로 사용하고있다.
String url = "http://example.com/path/to/my/thing/{parameter}";
ResponseEntity<MyClass> response = restTemplate.postForEntity(url, payload, MyClass.class, parameter);
그리고 그것은 좋다.
그러나 때때로 매개 변수가 % 2F입니다. 나는 이것이 이상적이 아니라는 것을 안다. 그러나 그것은 그것이 무엇인지이다. 올바른 URL은 http://example.com/path/to/my/thing/%2F이어야하지만 매개 변수를 "% 2F"로 설정하면 이중으로 이스케이프 처리되어 http://example.com/path/to가됩니다. / my / thing / % 252F. 어떻게 이것을 막을 수 있습니까?
해결법
-
==============================
1.String URL을 사용하는 대신 UriComponentsBuilder를 사용하여 URI를 작성하십시오.
String URL을 사용하는 대신 UriComponentsBuilder를 사용하여 URI를 작성하십시오.
String url = "http://example.com/path/to/my/thing/"; String parameter = "%2F"; UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url).path(parameter); UriComponents components = builder.build(true); URI uri = components.toUri(); System.out.println(uri); // prints "http://example.com/path/to/my/thing/%2F"
UriComponentsBuilder # build (boolean)를 사용하여
이는 {parameter}를 대체하고 직접 URI 객체를 만드는 것과 거의 같습니다.
String url = "http://example.com/path/to/my/thing/{parameter}"; url = url.replace("{parameter}", "%2F"); URI uri = new URI(url); System.out.println(uri);
그런 다음이 URI 객체를 postForObject 메소드의 첫 번째 인수로 사용할 수 있습니다.
-
==============================
2.나머지 템플리트에 이미 URI를 인코딩했다는 것을 알릴 수 있습니다. 이 작업은 UriComponentsBuilder.build (true)를 사용하여 수행 할 수 있습니다. 이 방법은 휴식 템플릿은 uri를 탈출하려고하지 않습니다. 대부분의 나머지 템플리트 api는 첫 번째 인수로 URI를 승인합니다.
나머지 템플리트에 이미 URI를 인코딩했다는 것을 알릴 수 있습니다. 이 작업은 UriComponentsBuilder.build (true)를 사용하여 수행 할 수 있습니다. 이 방법은 휴식 템플릿은 uri를 탈출하려고하지 않습니다. 대부분의 나머지 템플리트 api는 첫 번째 인수로 URI를 승인합니다.
String url = "http://example.com/path/to/my/thing/{parameter}"; url = url.replace("{parameter}", "%2F"); UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url); // Indicate that the components are already escaped URI uri = builder.build(true).toUri(); ResponseEntity<MyClass> response = restTemplate.postForEntity(uri, payload, MyClass.class, parameter);
from https://stackoverflow.com/questions/28182836/resttemplate-to-not-escape-url by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] spring jpa application.properties useSSL (0) | 2019.03.25 |
---|---|
[SPRING] 스프링 JSON 요청 본문이 Java POJO에 매핑되지 않았습니다. (0) | 2019.03.25 |
[SPRING] 스프링 컨테이너가 빈의 싱글 톤 인스턴스를 반환하지 않게하려면 어떻게해야합니까? (0) | 2019.03.24 |
[SPRING] JUnitTest의 @ControllerAdvice 주석이 달린 컨트롤러를 MockMVC에 등록하십시오. (0) | 2019.03.24 |
[SPRING] 'hibernate.dialect'가 설정되어 있지 않으면 Connection은 null이 될 수 없다. (0) | 2019.03.24 |