fastjson转化为map_redis 结合Spring小问题之FastJson

redis这一款数据库,不结合下Spring家族怎么成呢。

于是乎,下午我试着搞了一把,

这里,使用了阿里郎家的FASTJASON辅助包,版本在这儿:

<dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.54</version>
</dependency>

配置如下:

95e2720d3f5ef9aa4109d2198b52df41.png

cdc4a5846145b4d873fef7c3d318f998.png

ps:这里是为了学习,所以配置稍显繁琐,见谅

测试如下:

     @Test
    public void redisFactoryTest(){
        ValueOperations<String, Object> valueOperations = redisTemplate.opsForValue();
        User u = new User(1000,"ttt",new Date());
        valueOperations.set("userer:10",u);
        User user = (User) valueOperations.get("userer:10");
        System.out.println(user);
    }

结果出现了这样的问题:

fastjson autotype is not support. dao.User!!!!

是的,牛逼的阿里郎并没有把我们存储的数据正确解析。

关于这个问题,搜索获得大多数结果都是类似这种:

bd8f475cf244d66522633124cc233ff0.png

可是在加完之后还是没有解决。这对于新手实在太不友好了。

那我们从多个发面试着找一下没成功的原因:

  • 其一,文件配置问题
  • 其二,类的定义问题
  • 其三,Fastjson的配置问题
  • 其四,服务器存在的问题

首先,文件配置问题:

我们需要清楚,配置时我们需要配置三个必要的类:JedisPoolConfig、JedisConnectionFactory和RedisTemplate,以及其他我们可能需要的帮助我们解析jason的类

如图里id为ss、jacks和fast

116e8b9d9b6e70e1ccf00d8b487b5dfd.png

同时,如果我们对于解析的类有具体要求,可以像上图这样配置,当然,如果不想配置过多类的话,自己在业务代码中手动实现jason的转换,也是可以的,建议创一个工具类喔,这种情况下,就不需要单独为RedisTemplate配置这么多了,这一点一定要注意。

具体的原因就是,redis底层并不支持直接存储对象,所以我们需要先转化成字符串来存储!

其次,类的定义问题

我们要先知道,为什么jdk可以帮我们将字符串转化为对象,其实是用到了ObjectMapper,底层是用到了反射机制的,所以,我们如果要将一个字符串转化为对象,一定记得要给这个类留一个 空的构造函数 !!!这点很关键,当然也是我这个菜鸡栽倒的地方,害。

其三,fastjsan的配置

这个时候,如果前面都没有问题,就是真的可能是fastjson的识别没有开了嗷,加上以下两种的一种:

 ParserConfig.getGlobalInstance().addAccept("dao");  // 其一
                                     // 这里写的是要解析的类所在的包名
 ParserConfig.getGlobalInstance().setAutoTypeSupport(true);   // 其二

1f78e40cb73192728c820f6e76ca443b.png
像这样

这一点,实际上我没有遇到,但是看网上大家都是这个口径,我们就暂且相信这个是正确的吧!

其四,服务器存在的问题:

就像上一篇遇到的问题一样,你端口开了么,ip地址真的是你配置的那个?

怎么办,真的不知道

那就测一下!

@Test
    public void PingTest(){
        Object execute = redisTemplate.execute(new RedisCallback() {
            public String doInRedis(RedisConnection connection) {
                return connection.ping();
            }
        });
        System.out.println(execute);
    }

121a9ae8b027a7ead80846797482006a.png

如果没有听到一声“pong”!还是去看看服务器的地址或者端口的问题吧,不能ping通嗷~

首次学redis,如果有说的不对的地方,希望大家给我指出。感谢QQ群中与我讨论的一位网友,实名感谢***网友,hhh,虽然估计也看不到吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值