使用setJson时Jedis在第1行第1列的期望值

问题描述 投票:0回答:1

在 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/所以我不确定出了什么问题

java redis jedis
1个回答
0
投票

jsonSet(key, object)
期望一个对象,其
toString()
将提供有效的 JSON。

您可以使用

jsonSetWithEscape(key, object)
来避免麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.