加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

java-无法提出正确的请求Rest Template

发布时间:2020-12-15 01:17:41 所属栏目:大数据 来源:网络整理
导读:因此,我正在使用GET在我的Java项目中调用一个API(此API用于发送SMS). 这是API URL: http://xxxxx.smsapi.xx/xxxx/xxxx.aspx?user=usernamepassword=passwordmsisdn=xxxxxxsid=2222211msg=test%20msgfl=0 当我在浏览器中拨打电话时,我得到了很好的响应,如下

因此,我正在使用GET在我的Java项目中调用一个API(此API用于发送SMS).

这是API URL:

http://xxxxx.smsapi.xx/xxxx/xxxx.aspx?user=username&password=password&msisdn=xxxxxx&sid=2222211&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/htmlrn

我已经尝试添加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.请注意,双重编码会将%更改为%.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读