【发布时间】:2015-12-14 12:43:12
【问题描述】:
我正在使用 REST 模板有意在请求 uri 中发送 %,例如 /items/a%b
String responseEntity = restTemplate.exchange("/items/a%b",
requestObj.getHttpMethod(), requestEntity, String.class);
restTemplate 正在转换这个 uri 的结尾,它正在变成/items/a%25b,这是有道理的,因为默认情况下其余模板对 uri 进行编码。
我尝试使用 UriComponent 禁用 uri 的编码
UriComponents uriComponents = UriComponentsBuilder.fromPath("/items/a%b").build();
URI uri= uriComponents.toUri();
String responseEntity = restTemplate.exchange(uri,
requestObj.getHttpMethod(), requestEntity, String.class);
但这不起作用,因为 uri 再次属于进行编码的 URI 类型。我确定我没有以正确的方式使用 UriComponents。
如果有人能指出禁用编码的正确方法,我将不胜感激。
谢谢。
【问题讨论】:
-
您说要发送的请求是非法的。为什么你认为你需要一个悬空百分号?
-
我正在编写一个测试以使服务器优雅地处理它。它用于命中远程服务器的完整集成测试。所以没有什么是嘲笑的。
-
服务器不应该“优雅地”处理它,它应该返回 400 错误。
-
这就是我需要测试服务器返回400,但问题是restTemplate客户端无法发送请求。我使用 fiddler 进行了尝试,客户端能够在 uri 中使用 % 发送请求。
标签: java spring spring-mvc resttemplate