Использовать REST API, отправлять данные, используя x-www-form-urlencoded - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь использовать веб-сервис для получения токена. Это услуга POST, и я должен отправлять данные с использованием x-www-form-urlencoded, но я не уверен, как это сделать. У меня есть следующий код, но возвращается ошибка «400 Bad Request». Я использую jersey.api.client и gson. Служба возвращает объект JSON.

public VOToken getToken() {

    String uri = "https://login.mypurecloud.com/oauth/token";

    VOToken voToken = null;

    ClientConfig clientConfig = new DefaultClientConfig();
    clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);

    System.out.println(getAuthorizationHeaderString());

    Client client = Client.create(clientConfig);
    WebResource webResource = client.resource(uri);

    Form form = new Form();
    form.add("grant_type", "client_credentials");

    WebResource.Builder builder = webResource.accept(MediaType.APPLICATION_FORM_URLENCODED_TYPE);
    builder.header("Authorization", getAuthorizationHeaderString());
    builder.entity(form);

    //Response
    ClientResponse clientResponse = builder.type(MediaType.APPLICATION_JSON).post(ClientResponse.class);
    clientResponse.bufferEntity();
    String jsonString = clientResponse.getEntity(String.class);

    if(clientResponse.getStatus() == 200 ) {

        voToken = new Gson().fromJson(jsonString, VOToken.class);
        System.out.println(">> Access_token: "+ voToken.getAccess_token());
    }

    return voToken;
}

public String getAuthorizationHeaderString() {
    String clientId = "32ef8d9c-######################";
    String clientSecret = "6-M5A8Y06##################";
    String authorizationHeaderString = "";

    try {
        String encodedData = DatatypeConverter.printBase64Binary((clientId + ":" + clientSecret).getBytes("UTF-8"));
        authorizationHeaderString = "Basic " + encodedData;
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return authorizationHeaderString;
}

1 Ответ

0 голосов
/ 08 ноября 2019

Я считаю, что это APPLICATION_FORM_URLENCODED, а не APPLICATION_FORM_URLENCODED_TYPE.
Также в вашем ClientResponse измените тип носителя на APPLICATION_FORM_URLENCODED

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...