在一个Java 17项目中,我有这样一个Redis客户端:
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class RedisClient {
private final HostAndPort hostAndPortConfig = new HostAndPort(REDIS_HOST, parseInt(REDIS_PORT));
private final JedisClientConfig clientConfig = DefaultJedisClientConfig.builder()
.clientName("test")
.password(REDIS_PASS)
.build();
private final PooledConnectionProvider provider = new PooledConnectionProvider(hostAndPortConfig, clientConfig);
private final UnifiedJedis unifiedJedis = new UnifiedJedis(provider);
private static RedisClient instance;
public static synchronized RedisClient getInstance() {
if (instance == null) {
instance = new RedisClient();
}
return instance;
}
public <T> void insertJson(String key, T object) {
unifiedJedis.jsonSet(key, object);
}
public void ping() {
unifiedJedis.ping();
}
}
当我尝试setJson:
var user = new User().setDiscordName("testName");
redisClient.insertJson("test", user);
我得到了这个异常:
Exception in thread "main" redis.clients.jedis.exceptions.JedisDataException: expected value at line 1 column 1
at redis.clients.jedis.Protocol.processError(Protocol.java:96)
at redis.clients.jedis.Protocol.process(Protocol.java:137)
at redis.clients.jedis.Protocol.read(Protocol.java:192)
at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:335)
at redis.clients.jedis.Connection.getOne(Connection.java:317)
at redis.clients.jedis.Connection.executeCommand(Connection.java:131)
at redis.clients.jedis.executors.DefaultCommandExecutor.executeCommand(DefaultCommandExecutor.java:24)
at redis.clients.jedis.UnifiedJedis.executeCommand(UnifiedJedis.java:183)
at redis.clients.jedis.UnifiedJedis.jsonSet(UnifiedJedis.java:3841)
at redis.clients.jedis.json.RedisJsonCommands.jsonSet(RedisJsonCommands.java:9)
at dev.rifaii.database.RedisClient.insertJson(RedisClient.java:41)
at dev.rifaii.Main.main(Main.java:18)
我试着按照Redis网站上的文档:https://developer.redis.com/howtos/redisjson/using-java/所以我不确定出了什么问题
1条答案
按热度按时间oknrviil1#
jsonSet(key, object)
期望toString()
提供有效JSON的对象。您可以使用
jsonSetWithEscape(key, object)
来避免麻烦。