java-无法提出正确的请求Rest Template
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-无法提出正确的请求Rest Template,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2372字,纯文字阅读大概需要4分钟。
内容图文
![java-无法提出正确的请求Rest Template](/upload/InfoBanner/zyjiaocheng/650/a53cd2f9a4ed4479bfb92b2dc8bc5b45.jpg)
因此,我正在使用GET在我的Java项目中调用一个API(此API用于发送SMS).
这是API URL:
http://xxxxx.smsapi.xx/xxxx/xxxx.aspx?user=username&password=password&msisdn=xxxxxx&sid=1111111&msg=test%20msg&fl=0
当我在浏览器中拨打电话时,我得到了很好的响应,如下所示:
{"ErrorCode":"000",
"ErrorMessage":"Success",
"JobId":"id",
"MessageData":
[{"Number":"xxxxxxx",
"MessageParts":[{"MsgId":"id",
"PartId":1,
"Text":"test msg"}]
}]}
但是,当我在项目中进行“呼叫”时,会收到相同的消息,但文本字段如下所示:
"Text":"test%20msg"
并且发送到手机的文本与“”一起发送,这不是我想要的,响应错误.
这是我目前的Java代码:
UriComponentsBuilder builder = UriComponentsBuilder
.fromUriString(env.getProperty("smsProviderUrl"))
// Add query parameter
.queryParam("user", env.getProperty("smsUser"))
.queryParam("password", env.getProperty("smsPassword"))
.queryParam("msisdn", new Object[] {number})
.queryParam("sid", sendedID)
.queryParam("msg", body)
.queryParam("fl", env.getProperty("smsFl"));
RestTemplate template = this.restTemplate();
List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_HTML));
messageConverters.add(converter);
template.setMessageConverters(messageConverters);
SmsResponseDTO response = template.getForObject(builder.toUriString(), SmsResponseDTO.class);
这是在浏览器上发送的标头:
Content-Type: text/html; charset=utf-8
在使用wireshark获取数据包之后,我发现这是从Java发送的标头
Accept: text/html\r\n
我已经尝试添加UTF-8字符集,但是它没有起作用,而且我认为utf-8是默认设置的,所以我不确定这是否是问题,我认为它与标题im不确定有关.
谢谢!
解决方法:
您最有可能对请求URI进行两次编码.首先,确认正文中不包含该正文,请确保这是纯文本消息.
然后使用以下命令将UriComponentsBuilder手动转换为String:
String uri = UriComponentsBuilder
.fromUriString(env.getProperty("smsProviderUrl"))
// Add query parameter
.queryParam("user", env.getProperty("smsUser"))
.queryParam("password", env.getProperty("smsPassword"))
.queryParam("msisdn", new Object[] {number})
.queryParam("sid", sendedID)
.queryParam("msg", body)
.queryParam("fl", env.getProperty("smsFl"))
.encode()
.build()
.toUriString();
并确认URI包含& msg = test msg而不包含& msg = test%20msg.请注意,双重编码会将%更改为%.
内容总结
以上是互联网集市为您收集整理的java-无法提出正确的请求Rest Template全部内容,希望文章能够帮你解决java-无法提出正确的请求Rest Template所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。