From 560a8d7c3b8d79382ce3f9fbb8e565944b64205f Mon Sep 17 00:00:00 2001 From: kohlerpop1 Date: Fri, 1 Mar 2024 16:08:05 -0500 Subject: [PATCH] Added IllegalStateException to LiveUserDataMapper to catch `getAsJsonObject` exception. Created HttpRequestJsonMapper and HttpResponseJsonMapper for ActionResult gson parser. --- .../tiktok/common/ActionResult.java | 11 ++++++++-- .../http/mappers/HttpRequestJsonMapper.java | 21 +++++++++++++++++++ .../http/mappers/HttpResponseJsonMapper.java | 21 +++++++++++++++++++ .../http/mappers/LiveUserDataMapper.java | 2 +- 4 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/HttpRequestJsonMapper.java create mode 100644 Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/HttpResponseJsonMapper.java diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java index ac8cd60..7ea824a 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java @@ -1,15 +1,22 @@ package io.github.jwdeveloper.tiktok.common; import com.google.gson.*; +import io.github.jwdeveloper.tiktok.http.mappers.*; import lombok.Data; import lombok.experimental.Accessors; +import java.net.http.*; import java.util.Optional; import java.util.function.Function; @Data public class ActionResult { + private static final Gson gson = new Gson().newBuilder().disableHtmlEscaping() + .registerTypeHierarchyAdapter(HttpResponse.class, new HttpResponseJsonMapper()) + .registerTypeHierarchyAdapter(HttpRequest.class, new HttpRequestJsonMapper()) + .setPrettyPrinting().create(); + private boolean success = true; private T content; private String message; @@ -93,7 +100,7 @@ public class ActionResult { public JsonObject toJson() { JsonObject map = new JsonObject(); map.addProperty("success", success); - map.add("content", new Gson().toJsonTree(content)); + map.add("content", gson.toJsonTree(content)); map.addProperty("message", message); map.add("previous", hasPrevious() ? previous.toJson() : null); return map; @@ -101,6 +108,6 @@ public class ActionResult { @Override public String toString() { - return "ActionResult: "+new Gson().newBuilder().setPrettyPrinting().create().toJson(toJson()); + return "ActionResult: "+gson.toJson(toJson()); } } \ No newline at end of file diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/HttpRequestJsonMapper.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/HttpRequestJsonMapper.java new file mode 100644 index 0000000..51c1441 --- /dev/null +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/HttpRequestJsonMapper.java @@ -0,0 +1,21 @@ +package io.github.jwdeveloper.tiktok.http.mappers; + +import com.google.gson.*; + +import java.lang.reflect.Type; +import java.net.http.HttpRequest; + +public class HttpRequestJsonMapper implements JsonSerializer +{ + @Override + public JsonElement serialize(HttpRequest src, Type typeOfSrc, JsonSerializationContext context) { + JsonObject object = new JsonObject(); + object.addProperty("method", src.method()); + object.add("timeout", context.serialize(src.timeout().toString())); + object.addProperty("expectContinue", src.expectContinue()); + object.add("uri", context.serialize(src.uri())); + object.add("version", context.serialize(src.version().toString())); + object.add("headers", context.serialize(src.headers().map())); + return object; + } +} \ No newline at end of file diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/HttpResponseJsonMapper.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/HttpResponseJsonMapper.java new file mode 100644 index 0000000..4c0a5ec --- /dev/null +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/HttpResponseJsonMapper.java @@ -0,0 +1,21 @@ +package io.github.jwdeveloper.tiktok.http.mappers; + +import com.google.gson.*; + +import java.lang.reflect.Type; +import java.net.http.HttpResponse; + +public class HttpResponseJsonMapper implements JsonSerializer +{ + @Override + public JsonElement serialize(HttpResponse src, Type typeOfSrc, JsonSerializationContext context) { + JsonObject object = new JsonObject(); + object.addProperty("statusCode", src.statusCode()); + object.add("request", context.serialize(src.request())); + object.add("headers", context.serialize(src.headers().map())); + object.add("body", context.serialize(src.body())); + object.add("uri", context.serialize(src.uri().toString())); + object.add("version", context.serialize(src.version().toString())); + return object; + } +} \ No newline at end of file diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/LiveUserDataMapper.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/LiveUserDataMapper.java index 9b9cd4b..2c80207 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/LiveUserDataMapper.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/LiveUserDataMapper.java @@ -65,7 +65,7 @@ public class LiveUserDataMapper }; return new LiveUserData.Response(json, statusEnum, roomId, startTime); - } catch (JsonSyntaxException e) { + } catch (JsonSyntaxException | IllegalStateException e) { logger.warning("Malformed Json: '"+json+"' - Error Message: "+e.getMessage()); return new LiveUserData.Response(json, LiveUserData.UserStatus.NotFound, "", -1); }