Создание вставки Hastebin с помощью Java

Я пытаюсь создать 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

Буду очень признателен за помощь.

Это должен быть ofString, а не fromString или asString. Вам также не хватает импорта JSONObject.

Joe C 01.12.2018 11:35
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
1 026
1

Ответы 1

Учитывая, что вы работаете с 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.


Кроме того, как упоминалось в примере ПОЛУЧИТЬ 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 в более общей реализации для возврата пользовательского типа объекта.

... а для JSONObject вам нужно будет убедиться, что Библиотека Джексона добавлен в зависимость вашего проекта.

Naman 01.12.2018 11:42

Я не знаю, откуда мне скачать Джексона, у вас есть для меня ссылка?

Tal Moshel 01.12.2018 14:33

@TalMoshel Одна возможная ссылка может быть maven central - search.maven.org/artifact/com.fasterxml.jackson.core/…

Naman 01.12.2018 14:46

Что это? Я проверил сайт, но ничего не понимаю.

Tal Moshel 01.12.2018 14:55

@TalMoshel Это репозиторий зависимостей. Вы можете проверить параметр загрузки и загрузить jar и включить его в качестве внешней зависимости в свой проект.

Naman 01.12.2018 15:01

Я загрузил его и установил как внешнюю зависимость, но я все еще не могу импортировать JSONObject. любая помощь?

Tal Moshel 01.12.2018 15:06

@TalMoshel обновили ответ кодом, чтобы преобразовать тело строки, например, в Map, и предоставили ссылки на зависимости, необходимые для кода.

Naman 01.12.2018 15:52

Другие вопросы по теме