Создание пасты 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
Я был бы очень признателен за помощь.
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.
Кроме того, как упоминалось в примере 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
в более общей реализации для возврата пользовательского типа объекта.