我有以下要求:
String url = "url to oauth_token";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
RestTemplate restTemplate = new RestTemplate();
String body = "grant_type=authorization_code&client_id=123&client_secret=123&"
+ "redirect_uri=https://axyz.com&code=123";
HttpEntity<Object> entity = new HttpEntity<>(body, headers);
Object token = restTemplate.exchange(url, HttpMethod.POST, entity, Object.class);
这似乎返回400(错误请求)。我也尝试过其身体是MultiValueMap
的替代方案,但这对我来说是最有意义的。我尝试请求的方式有问题吗?
答案 0 :(得分:1)
POST字段的值应该是URL编码的(您可以在连接URLEncoder.encode(value, "UTF-8")
字符串时)为每个值使用body
。这就是你得到400错误的原因。
您最好使用更方便的方法来创建包含键和值的POST表单实体,这将自动对您的值进行URL编码:
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("param1", "value1"));
formparams.add(new BasicNameValuePair("redirect_uri", "https://axyz.com"));
...
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);