Конвертировать клиент Джерси в HttpUrlConnection - PullRequest
2 голосов
/ 09 июля 2019

У меня есть клиент Jersey, который получает токен jwt из API.

Это код

public static final String INFO_ENDPOINT = "http://10.1.9.10:7100/Info/";
private static final String INFO_USERNAME = "user";
private static final String INFO_PASSWORD = "password";
private static final String AUTH_PATH = "auth";
private String token;
private final Client client;

public JerseyClient() {
    ClientConfig cc = new DefaultClientConfig();

    cc.getClasses().add(MultiPartWriter.class);
    client = Client.create(cc);
}

public void authenticate() {
    try {
        WebResource resource = client.resource(INFO_ENDPOINT + AUTH_PATH);
        StringBuilder sb = new StringBuilder();
        sb.append("{\"username\":\"" + INFO_USERNAME + "\",");
        sb.append("\"password\":\"" + INFO_PASSWORD + "\"}");
        ClientResponse clientResp = resource.type("application/json")
                                            .post(ClientResponse.class, sb.toString());
        String content = clientResp.getEntity(String.class);
        System.out.println("Response:" + content);
        token = content.substring(content.indexOf("\"token\":") + 9,
                                  content.lastIndexOf("\""));
        System.out.println("token " + token);
    } catch (ClientHandlerException | UniformInterfaceException e) {
    }
}

Приведенный выше код возвращает токен jwt, который затем используется в качестве ключа для другого вызова.

Я пытаюсь преобразовать его в HttpUrlConnection. Но это не похоже на работу

Это то, что я пробовал. Это не выдает ошибку, но также не возвращает токен. Ответ пуст

try {
    URL url = new URL("http://10.1.9.10:7100/Info/auth");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setDoOutput(true);
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-Type", "application/json");
    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    conn.setRequestProperty("accept", "application/json");

    String input = "{\"username\":user,\"password\":\"password\"}";

    OutputStream os = conn.getOutputStream();
    os.write(input.getBytes());
    os.flush();

    if (conn.getResponseCode() != 200) {
        throw new RuntimeException("Failed : HTTP error code : "
           + conn.getResponseCode());
    }

    BufferedReader br = new BufferedReader(new InputStreamReader(
       (conn.getInputStream())));

    String output;
    System.out.println("Output from Server .... \n");
    while ((output = br.readLine()) != null) {
        System.out.println(output);
    }

    conn.disconnect();

} catch (IOException e) {
}

Моя проблема в том, что я не могу перевести .post(ClientResponse.class, sb.toString()) в HttpUrlConnection.

Что мне не хватает или что я делаю не так?

Спасибо

1 Ответ

0 голосов
/ 17 июля 2019

Проблема решена.Код работает как есть.

Проблема была в том, что мне не хватало кавычек для значения json String

Должно было быть

String input = "{\"username\":\"user\",\"password\":\"password\"}";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...