Преобразование обмена RestTemplate в вызов okHttpClient - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь заменить ResteTemplate в приложении с весенней загрузкой на OkHttpClient.

Вот мой код с RestTemplate от Spring:

HttpHeaders headers = new HttpHeaders();
headers.add("Accept", "application/json");
headers.add("Content-Type", "application/x-www-form-urlencoded");
HttpEntity<?> httpEntity = new HttpEntity<>("grant_type=client_credentials&scope=" + config.getScope(), headers);

ResponseEntity<Token> resp = getRestTemplate(builder).exchange(
      new URI(config.getTokenUrl()),
      HttpMethod.POST,
      httpEntity,
      Token.class);

А вот моя попытка сопоставить этот код с OkHttpClient:

RequestBody requestBody = new MultipartBody.Builder()
                    .setType(MultipartBody.FORM)
                    .addFormDataPart("body", "grant_type=client_credentials&scope=" + config.getScope())
                    .build();

Request request = new Request.Builder()
                .header("Accept", "application/json")
                .header("Content-Type", "application/x-www-form-urlencoded")
                .url("http://" + config.getTokenUrl())
                .post(requestBody)
                .build();

OkHttpClient client = buildOkHttpClient();

Response response = client.newCall(request).execute();
Objects.requireNonNull(response.body()).close();

Проблема в том, что Я получаю ошибку Response{protocol=http/1.1, code=405, message=Method Not Allowed. Метод Http - это POST, как видно из RestTemplate.

Но я не уверен, как я должен отобразить / преобразовать HttpEntity<?> httpEntity = new HttpEntity<>("grant_type=client_credentials&scope=" + config.getScope(), headers);, чтобы соответствовать OkHttp? Может быть, ошибка здесь?

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 24 марта 2020

Проверьте эту ссылку и эту конструкцию:

RequestBody requestBody = new FormBody.Builder()
  .add("grant_type", "client_credentials")
  .add("scope", config.getScope())
  .build();

Request request = new Request.Builder()
  .url("http://" + config.getTokenUrl())
  .post(requestBody)
  .build();
...