在一个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();
    }
}

当我try 设置Json时:

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

推荐答案

jsonSet(key, object)需要其toString()将提供有效JSON的对象.

你可以用jsonSetWithEscape(key, object)来避免麻烦.

Java相关问答推荐

Spring Webocket:尽管凭据设置为False,但MLhttpsify和Fetch请求之间的CORS行为存在差异

将偶数元素移动到数组的前面,同时保持相对顺序

我可以在regex中的字符类中放置断言吗?

使用包私有构造函数强制子类Java类

方法没有用正确的值填充数组—而是将数组保留为null,'

Spring Boot 3.2.2中的@Inject和@Resource Remove

对字符串长度进行排序,但颠倒了顺序(最长字符串在前)

尽管通过中断请求线程死亡,但线程仍将继续存在

使用用户引入的参数生成人员数组

为什么我的回收视图会显示重复的列表?

是否在settings.xml中使用条件Maven镜像?

在Ubuntu 23.10上使用mp3创建JavaFX MediaPlayer时出错

如何在Jooq中获取临时表列引用?

在Spring Boot应用程序中,server.port=0的默认端口范围是多少?

try 使用预准备语句占位符获取信息时出现Try-With-Resources错误

如何通过Java java.lang.Foreign API访问本机字节数组

在Java Spring JPA中插入包含对其他实体的引用的列

控制器建议异常处理

如何以事务方式向ibmmq发送消息

将Optionals/null安全添加到嵌套的flatMap/流