Java spring android resttemplate编码url

Java spring android resttemplate编码url,java,android,spring,spring-android,Java,Android,Spring,Spring Android,我使用Spring androidRestTemplate执行对Youtube API的GET请求,如下所示: // build rest template RestTemplate restTemplate = new RestTemplate(); GsonHttpMessageConverter jsonConverter = new GsonHttpMessageConverter(); FormHttpMessageConverter formHttpMessageConverter

我使用Spring android
RestTemplate
执行对Youtube API的GET请求,如下所示:

// build rest template
RestTemplate restTemplate = new RestTemplate();

GsonHttpMessageConverter jsonConverter = new GsonHttpMessageConverter();
FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter();
final List<HttpMessageConverter<?>> listHttpMessageConverters = restTemplate.getMessageConverters();

listHttpMessageConverters.add(jsonConverter);
listHttpMessageConverters.add(formHttpMessageConverter);
listHttpMessageConverters.add(stringHttpMessageConverter);
restTemplate.setMessageConverters(listHttpMessageConverters);

Uri.Builder uriBuilder = Uri.parse(https://www.googleapis.com/youtube/v3/channels).buildUpon();
uriBuilder.appendQueryParameter("key", API_KEY);
uriBuilder.appendQueryParameter("part", "id,snippet");
uriBuilder.appendQueryParameter("forUsername", channelName);

String url = uriBuilder.build().toString(); // this is right url
// like this:  https://www.googleapis.com/youtube/v3/channels?key=MY_KEY&part=id%2Csnippet&forUsername=cnn

MyEntity result =  restTemplate.getForObject(url, MyEntity.class);
//构建rest模板
RestTemplate RestTemplate=新RestTemplate();
GsonHttpMessageConverter jsonConverter=新的GsonHttpMessageConverter();
FormHttpMessageConverter FormHttpMessageConverter=新FormHttpMessageConverter();
StringHttpMessageConverter StringHttpMessageConverter=新的StringHttpMessageConverter();

最后一个列表恰好需要
字符串的
restemplate#getForObject(..)
方法从给定的
字符串构建URI,并在使用它之前对其进行编码。它使用定制的Spring类来实现这一点。(请参阅源代码。)

您可以通过从
字符串创建对象并将其传递给方法来解决此问题

String url = uriBuilder.build().toString(); // this is right url
URI uri = new URI(url);
MyEntity result =  restTemplate.getForObject(uri, MyEntity.class);

恰好,
restemplate#getForObject(..)
方法需要一个
字符串
从给定的
字符串
构建一个URI,并在使用它之前对其进行编码。它使用定制的Spring类来实现这一点。(请参阅源代码。)

您可以通过从
字符串创建对象并将其传递给方法来解决此问题

String url = uriBuilder.build().toString(); // this is right url
URI uri = new URI(url);
MyEntity result =  restTemplate.getForObject(uri, MyEntity.class);