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

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版本。如果您的版本太旧,例如版本3.0.6.RELEASE,那么您将没有UriComponentsBuilderspring-web jar那样的便利。

您需要防止Spring RestTemplate对URL进行编码。您可以做的是:

import java.net.URI;

StringBuilder builder = new StringBuilder("http://");
builder.append(endpointUrl);
builder.append("?method=logout&session=");
builder.append(sessionId);

URI uri = URI.create(builder.toString());
restTemplate.getForObject(uri, Object.class);

我使用Spring 3.0.6.RELEASE版本对其进行了测试,并且可以正常工作。

简而言之,不要使用restTemplate.getForObject(String url,Object.class),而要使用restTemplate.getForObject(java.net.URI uri, Object.class)

请参阅Spring文档的rest-resttemplate-uri部分



 类似资料:
  • 问题内容: 我正在工作的项目是使用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配置解码器,以某种方式将转换为,修改它,