当前位置: 首页 > 知识库问答 >
问题:

spring resttemplate url编码

西门正平
2023-03-14

我尝试使用springs RESTTemplate执行一个简单的rest调用:

private void doLogout(String endpointUrl, String sessionId) {
    template.getForObject("http://{enpointUrl}?method=logout&session={sessionId}", Object.class,
            endpointUrl, sessionId);
}

其中endpointUrl变量包含类似service.host.com/api/service.php的内容

不幸的是,我的调用导致org.springframework.web.client.resourceAccessException:I/O错误:service.host.com%2fapi%2fservice.php

所以spring似乎在创建URL之前对我的endpointUrl字符串进行了编码。有没有一个简单的方法可以防止spring这样做?

问候

共有1个答案

牟正真
2023-03-14

没有简单的方法可以做到这一点。URI模板变量通常用于路径元素或查询字符串参数。你在试图通过一个宿主。理想情况下,您会找到构造URI的更好解决方案。我建议Yuci的解决方案。

如果您还想使用Spring实用程序和模板扩展,一个解决方案是使用UriTemplate生成带有URI变量的URL,然后对其进行URL解码并将其传递给RESTTemplate

String url = "http://{enpointUrl}?method=logout&session={sessionId}";
URI expanded = new UriTemplate(url).expand(endpointUrl, sessionId); // this is what RestTemplate uses 
url = URLDecoder.decode(expanded.toString(), "UTF-8"); // java.net class
template.getForObject(url, Object.class);
 类似资料:
  • 问题内容: 我正在工作的项目是使用Jackson JSON 序列化程序将一堆Java对象转换为String,以便将它们发送到REST服务。 其中一些对象包含敏感数据,因此我编写了自定义序列化程序以将这些对象序列化为JSON字符串,然后对其进行gzip,然后使用; 对其进行加密。 这会将字符串转换为字节数组,因此我在编解码器中使用Base64编码器将字节数组转换为字符串。REST接口背后的自定义反序

  • 最近,我们正在将java构建作业从serverA迁移到serverB,java源代码(包含中文字符)在使用Ant的原始serverA上编译良好( ),但是,当我们将相同的代码签出到新的serverB并运行相同的Ant脚本时,出现了编码错误,如“用于编码GBK的Unmappable character”(Unmappable character for encoding GBK)。(JDK版本相同)

  • 任何HTML或XML文档都有自己的编码方式,比如ASCII 或 UTF-8,但是使用Beautiful Soup解析后,文档都被转换成了Unicode: markup = "<h1>Sacr\xc3\xa9 bleu!</h1>" soup = BeautifulSoup(markup) soup.h1 # <h1>Sacré bleu!</h1> soup.h1.string # u'Sacr\

  • 任何HTML或XML文档都有自己的编码方式,比如ASCII 或 UTF-8,但是使用Beautiful Soup解析后,文档都被转换成了Unicode: markup = "<h1>Sacr\xc3\xa9 bleu!</h1>" soup = BeautifulSoup(markup) soup.h1 # <h1>Sacré bleu!</h1> soup.h1.string # u'Sacr\

  • 在我们真正开始去写代码之前,我们可能会去考虑一些事情。怎么去规划我们的任务,如何去细分这个任务。 如果一件事可以自动化,那么就尽量去自动化,毕竟你是一个程序员。 快捷键!快捷键!快捷键! 使用可以帮助你快速工作的工具——如启动器。 不过不得不提到的一点是:你需要去考虑这个需求是不是一个坑的问题。如果这是一个坑,那么你应该尽早的去反馈这个问题。沟通越早,成本越低。 编码过程 整个编程的过程如下图所示

  • 注: 内容翻译来自官网资料 Encoding. 这封文档描述protocol buffer消息的二进制格式. 在应用中使用protocol buffer不需要理解这些, 但是它对于了解不同的protocol buffer格式对编码消息的大小的影响非常有用. 简单消息 假设你有下面这个非常简单的消息定义: message Test1 { required int32 a = 1; } 在应用中

  • 编码要闻 所谓编码,是因为我们要把汉字,英文单词等,转化为二进制的数字,因为计算机只认识数字。 最开始的编码是ascii,当时还只能储存英文和某些字符,但是因为中国等其它国家并不使用英语,所以我们开始有了自己的编码,但是这个时候就出现了问题,因为它会不能避免的出现一些重合的东西,这个时候就出现了乱码,然后世界开始使用了unicode,不过它有个缺点就是它总是两个字节的储存东西,所以会造成资源的浪费

  • 我能解码一个mp4视频。如果我使用配置解码器,我可以在屏幕上看到视频。现在,我要编辑帧(添加一条黄线,甚至更好的是重叠一个微小的图像),并将视频编码为一个新的视频。不需要显示视频,我现在也不关心性能。(如果我在编辑时显示帧,如果编辑功能花费大量时间,我可能会有间隙),那么,你给我推荐什么呢?还是用GlSurface配置解码器,使用(GLES),或者用null配置解码器,以某种方式将转换为,修改它,