当前位置: 首页 > 面试题库 >

RestTemplate不转义URL

杨选
2023-03-14
问题内容

我正在像这样成功使用Spring RestTemplate:

String url = "http://example.com/path/to/my/thing/{parameter}";
ResponseEntity<MyClass> response = restTemplate.postForEntity(url, payload, MyClass.class, parameter);

那很好。

但是,有时parameter%2F。我知道这并不理想,但事实就是如此。正确的URL应该是:http://example.com/path/to/my/thing/%2F但是,当我设置parameter为URL
时,"%2F"会被双重转义为http://example.com/path/to/my/thing/%252F。我该如何预防?


问题答案:

而不是使用StringURL,而是使用来构建URI一个UriComponentsBuilder

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)指示

此构建器中设置的所有组件是否都已 编码(truefalse

这或多或少等同于您自己替换{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



 类似资料:
  • 我有一个使用调用的进程。此任务被提交给executor服务。我允许进程在尝试取消它之前有x秒的运行时间。但是,当我调用并且任务在方法中等待时,线程/任务不会被取消。 我已经对代码进行了测试,如果将替换为,则会得到。但是,当任务位于内时,不会出现中断。在face中,直到Restful调用完成,该方法才返回。 我看到了这篇文章,取消、中止、中断一个spring android resttemplate

  • 我有一个CSV文件,它将在引号内有分隔符或未关闭的引号,我如何使CSVReader忽略引号和引号内的分隔符。例如: 这是文件的内容。 下面的程序读取csv文件。 我收到了这样的订单。 之后报价发生了什么 编辑: 开放电脑依赖 com.开放电脑 3.4

  • 好的,首先是代码(它非常简单): 我不是疯子的下一个例子是邮差的回复(chrome): 并在完整错误日志的末尾: 例外情况 org.springframework.web.util.NestedServletException:请求处理失败;嵌套的异常为java.lang.IllegalArgumentException:“none”不包含“/”org.springframework.web.se

  • 问题内容: 想知道是否有一种简单的方法可以在Objective C中执行简单的HTML转义/转义。我想要的是这样的伪代码: 哪个返回 希望也转义所有其他HTML实体,甚至ASCII码(例如Ӓ等)。 Cocoa Touch / UIKit中有什么方法可以做到这一点? 问题答案: 包含以下解决方案。可可CF具有CFXMLCreateStringByUnescapingEntities函数,但在iPho

  • 问题内容: 我有一个网络服务电话,可以通过该电话上传zip文件。然后将文件转发到另一个服务以进行存储,解压缩等。目前,文件已存储在文件系统中,然后构建了FileSystemResource。 我可以使用ByteStreamResource来节省时间(转发之前不需要在磁盘上保存文件),但是为此,我需要构建一个字节数组。如果文件很大,我将收到“ OutOfMemory:java堆空间”错误。 使用Re