From 96968e4ab6590f5346d5434ced91213304fbce35 Mon Sep 17 00:00:00 2001 From: M Sazzadul Hoque <7600764+sazzad16@users.noreply.github.com> Date: Sat, 28 May 2022 22:15:12 +0600 Subject: [PATCH] Support RedisJSON SET/GET as plain string(s) (#3005) --- src/main/java/redis/clients/jedis/CommandObjects.java | 8 ++++++++ src/main/java/redis/clients/jedis/UnifiedJedis.java | 10 ++++++++++ .../redis/clients/jedis/json/RedisJsonCommands.java | 4 ++++ .../clients/jedis/modules/json/RedisJsonV1Test.java | 7 +++++++ 4 files changed, 29 insertions(+) diff --git a/src/main/java/redis/clients/jedis/CommandObjects.java b/src/main/java/redis/clients/jedis/CommandObjects.java index 4043e4c32b..efcd3734d4 100644 --- a/src/main/java/redis/clients/jedis/CommandObjects.java +++ b/src/main/java/redis/clients/jedis/CommandObjects.java @@ -3157,6 +3157,10 @@ public final CommandObject jsonSet(String key, Path path, Object pojo) { return new CommandObject<>(commandArguments(JsonCommand.SET).key(key).add(path).add(GSON.toJson(pojo)), BuilderFactory.STRING); } + public final CommandObject jsonSetWithPlainString(String key, Path path, String string) { + return new CommandObject<>(commandArguments(JsonCommand.SET).key(key).add(path).add(string), BuilderFactory.STRING); + } + public final CommandObject jsonSet(String key, Path2 path, Object object, JsonSetParams params) { return new CommandObject<>(commandArguments(JsonCommand.SET).key(key).add(path).add(object).addParams(params), BuilderFactory.STRING); } @@ -3185,6 +3189,10 @@ public final CommandObject jsonGet(String key, Path... paths) { return new CommandObject<>(commandArguments(JsonCommand.GET).key(key).addObjects((Object[]) paths), new GsonObjectBuilder<>(Object.class)); } + public final CommandObject jsonGetAsPlainString(String key, Path path) { + return new CommandObject<>(commandArguments(JsonCommand.GET).key(key).add(path), BuilderFactory.STRING); + } + public final CommandObject jsonGet(String key, Class clazz, Path... paths) { return new CommandObject<>(commandArguments(JsonCommand.GET).key(key).addObjects((Object[]) paths), new GsonObjectBuilder<>(clazz)); } diff --git a/src/main/java/redis/clients/jedis/UnifiedJedis.java b/src/main/java/redis/clients/jedis/UnifiedJedis.java index b325a15b60..4d9b97466e 100644 --- a/src/main/java/redis/clients/jedis/UnifiedJedis.java +++ b/src/main/java/redis/clients/jedis/UnifiedJedis.java @@ -3539,6 +3539,11 @@ public String jsonSet(String key, Path path, Object pojo) { return executeCommand(commandObjects.jsonSet(key, path, pojo)); } + @Override + public String jsonSetWithPlainString(String key, Path path, String string) { + return executeCommand(commandObjects.jsonSetWithPlainString(key, path, string)); + } + @Override public String jsonSet(String key, Path2 path, Object pojo, JsonSetParams params) { return executeCommand(commandObjects.jsonSet(key, path, pojo, params)); @@ -3574,6 +3579,11 @@ public Object jsonGet(String key, Path... paths) { return executeCommand(commandObjects.jsonGet(key, paths)); } + @Override + public String jsonGetAsPlainString(String key, Path path) { + return executeCommand(commandObjects.jsonGetAsPlainString(key, path)); + } + @Override public T jsonGet(String key, Class clazz, Path... paths) { return executeCommand(commandObjects.jsonGet(key, clazz, paths)); diff --git a/src/main/java/redis/clients/jedis/json/RedisJsonCommands.java b/src/main/java/redis/clients/jedis/json/RedisJsonCommands.java index 91223db497..6889176129 100644 --- a/src/main/java/redis/clients/jedis/json/RedisJsonCommands.java +++ b/src/main/java/redis/clients/jedis/json/RedisJsonCommands.java @@ -35,6 +35,8 @@ default String jsonSetLegacy(String key, Object pojo, JsonSetParams params) { String jsonSet(String key, Path path, Object pojo); + String jsonSetWithPlainString(String key, Path path, String string); + String jsonSet(String key, Path2 path, Object object, JsonSetParams params); String jsonSetWithEscape(String key, Path2 path, Object object, JsonSetParams params); @@ -49,6 +51,8 @@ default String jsonSetLegacy(String key, Object pojo, JsonSetParams params) { Object jsonGet(String key, Path... paths); + String jsonGetAsPlainString(String key, Path path); + T jsonGet(String key, Class clazz, Path... paths); default List jsonMGet(String... keys) { diff --git a/src/test/java/redis/clients/jedis/modules/json/RedisJsonV1Test.java b/src/test/java/redis/clients/jedis/modules/json/RedisJsonV1Test.java index a67690aaac..182b80f5a9 100644 --- a/src/test/java/redis/clients/jedis/modules/json/RedisJsonV1Test.java +++ b/src/test/java/redis/clients/jedis/modules/json/RedisJsonV1Test.java @@ -437,4 +437,11 @@ public void debugMemory() { client.jsonDebugMemory("json", ROOT_PATH); client.jsonDebugMemory("json", Path.of(".bar")); } + + @Test + public void plainString() { + String json = "{\"foo\":\"bar\",\"bar\":{\"foo\":10}}"; + assertEquals("OK", client.jsonSetWithPlainString("plain", ROOT_PATH, json)); + assertEquals(json, client.jsonGetAsPlainString("plain", ROOT_PATH)); + } }