com.fasterxml.jackson.databind.exc.InvalidDefinitionException

    科技2024-11-11  10

    com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.itheima.domain.Cart and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)

    最近在使用redis存储缓存数据是,用到了将对象转换成json的形式,遇到了以上的一个小错误,修改了好久才发现,因此在这里记录一下.

    java代码

    Cart cart = getCart(loginUser); cart.addCart(cartItem); // 将购物车对象存入redis缓存 Jedis jedis = JedisPoolUtils.getJedis(); // 转换对象为json String json = new ObjectMapper().writeValueAsString(cart); // 存入redis jedis.set(Constant.CART+loginUser.getUid(),json); jedis.close();

    上面是获取了cart(实体类)的对象,为其赋值后在转换成json形式字符串存入redis中,但是在后面测试的时候,一直会出现InvalidDefinitionException: No serializer found for class 这个错误.而翻译意思就是告诉我无效的定义,没有找到类的序列化器.但是好奇的是我并没有使用到需要序列化类的地方.不过后来经过对这个转换方法的解读,发现将对象转换为json其实就是将实体类进行了一个序列化操作,而在这个操作中,就需要用到我们的get/set方法. 解决

    @Data public class Cart {

    我这里使用的是lombok 其实也就是相应的为实体类加上get/set方法 然后问题就迎刃而解.

    Processed: 0.014, SQL: 8