我遇到过类似的问题,但他们似乎没有提供一个直接的例子。我正在尝试使用RestTemplate以编码的URL进行GET。我有一个亚马逊类助手来生成一个签名的url,但返回编码的url,所以当我在RestTemplate中使用它时,它会再次被编码。我应该输入到RestTemplate中的url应该是这样的;java RestTemplate GET请求与编码的URL
http://webservices.amazon.com/onca/xml?AWSAccessKeyId=REMOVED&AssociateTag=REMOVED&Keywords=php&Operation=ItemSearch&ResponseGroup=Images,ItemAttributes,Offers&SearchIndex=All&Service=AWSECommerceService&Timestamp=2017-09-05T06:47:25.703Z&Signature=dthAE5BwmK2aZmSoIPRBwsPgCNwIv6JnXoqjC0QyRCQ=
但我的亚马逊帮手给了我这个;
http://webservices.amazon.com/onca/xml?AWSAccessKeyId=REMOVED&AssociateTag=REMOVED&Keywords=php&Operation=ItemSearch&ResponseGroup=Images%2CItemAttributes%2COffers&SearchIndex=All&Service=AWSECommerceService&Timestamp=2017-09-05T06%3A47%3A25.703Z&Signature=dthAE5BwmK2aZmSoIPRBwsPgCNwIv6JnXoqjC0QyRCQ%3D
这是再次编码打破我的时间戳。我发现我可以很容易地使用字符串替换,但我正在寻找一种更好的方式来做到这一点。
我的代码看起来像这样;
SignedRequestsHelper helper;
try {
helper = SignedRequestsHelper.getInstance(this.ENDPOINT, this.ACCESS_KEY_ID, this.SECRET_KEY);
} catch (Exception e) {
return "ERROR";
//e.printStackTrace();
}
String requestUrl = null;
Map<String, String> params = new HashMap<String, String>();
...
requestUrl = helper.sign(params);
RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new ResponseErrorHandler());
...
try {
String response = restTemplate.getForObject(requestUrl, String.class);
} catch (HttpStatusCodeException exception) {
return exception.getStatusCode().toString();
}
好吧,我看到'getForObject'的3个变体。我见过UriComponentsBuilder。假设我有一个编码网址开始。我如何解码它? – LogicDev
@ user5500750你不会解码它,你会将它转换成一个URI并使用一个接受URI的重载方法。上述措词可以更清楚吗? –
除了我已经有一个由助手创建的编码url。你可以在我的代码中看到。我已经将我的参数提供给返回url的帮助器。我不想创建一个URI模板字符串,然后将其提供给'getForObject'方法。我是Java新手,所以希望我有道理。我意识到你在说什么,但把它放到代码中是问题所在。 – LogicDev