Add web request utilities
This commit is contained in:
parent
57e2221037
commit
6605664857
27
src/main/java/me/braydon/mc/common/UUIDUtils.java
Normal file
27
src/main/java/me/braydon/mc/common/UUIDUtils.java
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package me.braydon.mc.common;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
|
import lombok.experimental.UtilityClass;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Braydon
|
||||||
|
*/
|
||||||
|
@UtilityClass
|
||||||
|
public final class UUIDUtils {
|
||||||
|
/**
|
||||||
|
* Add dashes to an untrimmed uuid.
|
||||||
|
*
|
||||||
|
* @param trimmed the untrimmed uuid
|
||||||
|
* @return the uuid with dashes
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public static UUID addDashes(@NonNull String trimmed) {
|
||||||
|
StringBuilder builder = new StringBuilder(trimmed);
|
||||||
|
for (int i = 0, pos = 20; i < 4; i++, pos -= 4) {
|
||||||
|
builder.insert(pos, "-");
|
||||||
|
}
|
||||||
|
return UUID.fromString(builder.toString());
|
||||||
|
}
|
||||||
|
}
|
28
src/main/java/me/braydon/mc/common/web/JsonWebException.java
Normal file
28
src/main/java/me/braydon/mc/common/web/JsonWebException.java
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package me.braydon.mc.common.web;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NonNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This exception is raised when a
|
||||||
|
* {@link JsonWebRequest} encounters an error.
|
||||||
|
*
|
||||||
|
* @author Braydon
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public class JsonWebException extends RuntimeException {
|
||||||
|
/**
|
||||||
|
* The status code of the response.
|
||||||
|
*/
|
||||||
|
private final int statusCode;
|
||||||
|
|
||||||
|
protected JsonWebException(int statusCode, @NonNull String message) {
|
||||||
|
super(message);
|
||||||
|
this.statusCode = statusCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected JsonWebException(int statusCode, @NonNull Throwable cause) {
|
||||||
|
super(cause);
|
||||||
|
this.statusCode = statusCode;
|
||||||
|
}
|
||||||
|
}
|
105
src/main/java/me/braydon/mc/common/web/JsonWebRequest.java
Normal file
105
src/main/java/me/braydon/mc/common/web/JsonWebRequest.java
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
package me.braydon.mc.common.web;
|
||||||
|
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NonNull;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import me.braydon.mc.RESTfulMC;
|
||||||
|
import org.springframework.http.HttpMethod;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.http.HttpClient;
|
||||||
|
import java.net.http.HttpRequest;
|
||||||
|
import java.net.http.HttpResponse;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Json web request.
|
||||||
|
*
|
||||||
|
* @author Braydon
|
||||||
|
*/
|
||||||
|
@RequiredArgsConstructor(access = AccessLevel.PRIVATE) @Getter
|
||||||
|
public final class JsonWebRequest {
|
||||||
|
private static final HttpClient HTTP_CLIENT = HttpClient.newHttpClient();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The endpoint to make the request to.
|
||||||
|
*/
|
||||||
|
@NonNull private final String endpoint;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The method to use for the request.
|
||||||
|
*/
|
||||||
|
@NonNull private final HttpMethod method;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The headers to send with the request.
|
||||||
|
*/
|
||||||
|
private final Map<String, String> headers = Collections.synchronizedMap(new HashMap<>());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a new web request.
|
||||||
|
*
|
||||||
|
* @param endpoint the endpoint to make the request to
|
||||||
|
* @param method the method of the request to make
|
||||||
|
* @return the web request
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public static JsonWebRequest makeRequest(@NonNull String endpoint, @NonNull HttpMethod method) {
|
||||||
|
return new JsonWebRequest(endpoint, method);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a header for this request.
|
||||||
|
*
|
||||||
|
* @param name the header name
|
||||||
|
* @param value the header value
|
||||||
|
* @return the request
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public JsonWebRequest header(@NonNull String name, @NonNull String value) {
|
||||||
|
headers.put(name, value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute this request.
|
||||||
|
*
|
||||||
|
* @param responseType the response type
|
||||||
|
* @return the response
|
||||||
|
* @param <T> the type of the response
|
||||||
|
* @throws JsonWebException if an error is encountered while making the request
|
||||||
|
*/
|
||||||
|
public <T> T execute(@NonNull Class<T> responseType) throws JsonWebException {
|
||||||
|
// Build the request
|
||||||
|
HttpRequest.Builder request = HttpRequest.newBuilder()
|
||||||
|
.uri(URI.create(endpoint))
|
||||||
|
.method(method.name(), HttpRequest.BodyPublishers.noBody());
|
||||||
|
// Append headers
|
||||||
|
headers.put("User-Agent", "RESTfulMC");
|
||||||
|
headers.put("Content-Type", "application/json");
|
||||||
|
for (Map.Entry<String, String> header : headers.entrySet()) {
|
||||||
|
request.header(header.getKey(), header.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send the request and get the response
|
||||||
|
int status = -1; // The response status code
|
||||||
|
try {
|
||||||
|
HttpResponse<String> response = HTTP_CLIENT.send(request.build(), HttpResponse.BodyHandlers.ofString());
|
||||||
|
status = response.statusCode(); // Set the response status
|
||||||
|
if (status != 200) { // Status code is not OK, raise an exception
|
||||||
|
throw new IOException("Failed to make a %s request to %s: %s".formatted(method.name(), endpoint, status));
|
||||||
|
}
|
||||||
|
// Return with the response as the type
|
||||||
|
return RESTfulMC.GSON.fromJson(response.body(), responseType);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
if (!(ex instanceof JsonWebException)) {
|
||||||
|
throw new JsonWebException(status, ex);
|
||||||
|
}
|
||||||
|
throw (JsonWebException) ex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user