Possible duplicate Need help on RestTemplate Post Request with Body Parameters? and Spring RESTtemplate POST but these answers don't work for me
I tried to get access token from Instagram
API by Spring Android. The request from Instagram 's document like this:
curl \-F 'client_id=CLIENT-ID' \ -F 'client_secret=CLIENT-SECRET' \ -F 'grant_type=authorization_code' \ -F 'redirect_uri=YOUR-REDIRECT-URI' \ -F 'code=CODE' \https://api.instagram.com/oauth/access_token
Here is my request access token (After I get request token successful):
MultiValueMap mvm = new LinkedMultiValueMap(); mvm.add("client_id", INSTAGRAM_CILENT_ID); mvm.add("client_secret", INSTAGRAM_SECRET); mvm.add("grant_type", "authorization_code"); mvm.add("redirect_uri", CALLBACKURL); mvm.add("code", requestToken); InstagramResult result = restTemplate .postForObject("https://api.instagram.com/oauth/access_token", mvm, InstagramResult .class);
The result mapping class:
public class InstagramLogin { public String access_token; public InstagramUser user; } public class InstagramUser { public String id; public String username; public String full_name; public String profile_picture; }
And the rest template:
RestTemplate restTemplate = new RestTemplate(); final List> listHttpMessageConverters = new ArrayList >(); listHttpMessageConverters.add(new GsonHttpMessageConverter()); listHttpMessageConverters.add(new FormHttpMessageConverter()); listHttpMessageConverters.add(new StringHttpMessageConverter()); restTemplate.setMessageConverters(listHttpMessageConverters);
But I always get 400 bad request error. Here is my stack trace:
04-03 09:32:45.366: W/RestTemplate(31709): POST request for "https://api.instagram.com/oauth/access_token" resulted in 400 (BAD REQUEST); invoking error handler 04-03 09:32:46.857: E//DefaultRequestRunner.java:138(31709): 09:32:46.862 Thread-32787 An exception occurred during request network execution :400 BAD REQUEST 04-03 09:32:46.857: E//DefaultRequestRunner.java:138(31709): org.springframework.web.client.HttpClientErrorException: 400 BAD REQUEST 04-03 09:32:46.857: E//DefaultRequestRunner.java:138(31709): at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:76) 04-03 09:32:46.857: E//DefaultRequestRunner.java:138(31709): at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:524) 04-03 09:32:46.857: E//DefaultRequestRunner.java:138(31709): at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:481) 04-03 09:32:46.857: E//DefaultRequestRunner.java:138(31709): at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:439) 04-03 09:32:46.857: E//DefaultRequestRunner.java:138(31709): at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:317)
P/s: I am surely my parameter values are right, because I tested by curl and it worked fine.