无法从spring resttemplate

时间:2017-08-24 08:46:20

标签: java spring rest resttemplate

我有短信网关,我可以给网址发送短信,如下所示。

" 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;
}

代码的其他部分工作正常。它没有任何错误。但短信发送部分不起作用。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

我猜你在URL中使用的new-line字符有问题。试着逃避\

使用queryParams时URL的另一个问题。查询参数应该在?分隔符之后。

所以最终的网址可能如下:

String uri = "https://url?destination={mobileNum}&q=mypw\\n&message={msg}\\n";

The components of a URL

答案 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;
}

}