我有短信网关,我可以给网址发送短信,如下所示。
" https://url/destination= {mobileNum}&安培; Q = mypw \ n&安培;消息= {} MSG \ n"
我在resttemplate中使用过它并试图发送短信但它没有用。
public String send(String mobileNumber, String message) {
String uri = "https://url/destination={mobileNum}&q=mypw\n&message={msg}\n";
RestTemplate restTemplate = new RestTemplate();
URI result = restTemplate.postForLocation(uri, mobileNumber, message);
return result.toString();
//return null;
}
代码的其他部分工作正常。它没有任何错误。但短信发送部分不起作用。我该如何解决这个问题?
答案 0 :(得分:0)
我猜你在URL中使用的new-line
字符有问题。试着逃避\
使用queryParams时URL的另一个问题。查询参数应该在?
分隔符之后。
所以最终的网址可能如下:
String uri = "https://url?destination={mobileNum}&q=mypw\\n&message={msg}\\n";
答案 1 :(得分:0)
试试这个。
public String send(String mobileNumber, String message) {
String uri = "https://url/destination=" mobileNumber + "&q=mypw&message="+message;
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(uri, String.class);
return result;
}
根据RestTemplate文档,postForLocation方法用于通过将给定对象POST到URI模板来创建新资源,并返回Location头的值。此标头通常指示新资源的存储位置。 RestTemplate docs
服务器可能不允许查询新资源的位置,因此不会发送位置标头作为响应。
答案 2 :(得分:0)
读取网址时出错。 “mypw& message”被视为密码,而不仅仅是“mypw”。我在使用jboss调试模式调试代码时发现了它。
这是最终代码
@Service
public class SmsServiceImpl implements SmsService{
@Override
public String send(String mobileNumber, String message) {
String uri = "https://urlTodestination="+mobileNumber+"&q=pw&message="+message;
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(uri, String.class);
return result;
}
}