Создание пасты Hastebin с помощью Java - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь создать java-программу, которая могла бы дать ей строку, она вставила бы ее в Hastebin (www.hastebin.com) и распечатала URL-адрес вставки в консоли, и у меня есть такой код: Main.java (Основной класс):

public class Main {
    Hastebin hastebin;
    static String randomString = "HELLO";

    public static void main(String args[]) {
        System.out.println(Hastebin.paste((randomString)));
    }
}

Мой класс Hastebin.java:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Hastebin {

public static String paste(String content){
    final HttpClient client = HttpClient.newHttpClient();
    final HttpRequest request = HttpRequest.newBuilder(
            URI.create("https://hastebin.com/documents")
    ).POST(HttpRequest.BodyPublisher.fromString(content).build());

    final HttpResponse<String> response = client.send(request, 
    HttpResponse.BodyHandler.asString());
    final String responseContent = response.body();
    final JSONObject responseJson = new JSONObject(responseContent);
    final String key = responseJson.getString("key");
    return "https://hastebin.com/" + key;
    }
}

Мои ошибки:

Error:(14, 48) java: cannot find symbol
symbol:   method fromString(java.lang.String)
location: interface java.net.http.HttpRequest.BodyPublisher

Error:(17, 92) java: cannot find symbol
symbol:   method asString()
location: interface java.net.http.HttpResponse.BodyHandler

Error:(19, 15) java: cannot find symbol
symbol:   class JSONObject
location: class Hastebin

Error:(19, 45) java: cannot find symbol
symbol:   class JSONObject
location: class Hastebin

Iбыл бы очень признателен за помощь.

1 Ответ

0 голосов
/ 01 декабря 2018

Учитывая, что вы работаете с JDK-11 (наличие не жалованного пакета java.net.http), используемые вами API изменились на BodyPublishers.ofString и BodyHandlers.ofString.Вы можете обновить их в своем коде как:

final HttpRequest request = HttpRequest.newBuilder(URI.create("https://hastebin.com/documents"))
            .POST(HttpRequest.BodyPublishers.ofString(content)).build();

final HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

Примечание : API-интерфейсы были изменены так, как они были изначально разработаны, как во время модуля инкубатора в Java9,следовательно, вы можете найти документацию по предыдущим синтаксисам.

Дополнительно : Вот пример для запроса POST от openjdk.


Кроме того, как уже упоминалось в примере GET JSON , если вы хотите прочитать ответ как пользовательский объект, вы можете использовать пользовательский сопоставитель объектов как:

class UncheckedObjectMapper extends com.fasterxml.jackson.databind.ObjectMapper {
    Map<String, String> readValue(String content) {
        try {
            return this.readValue(content, new com.fasterxml.jackson.core.type.TypeReference() {
            });
        } catch (IOException ioe) {
            throw new CompletionException(ioe);
        }
    }
}

, а затем прочитайте ваш ответ как

final HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
Map<String, String> mappedResponse = new UncheckedObjectMapper().readValue(response.body());

Для разрешения вышеуказанных полных имен классов вам понадобятся зависимости свыше jackson-databind и jackson-core артефакты.

Примечание : вы можете использовать readValue в более общей реализации для возврата пользовательского типа объекта.

...