1.前端查询不到redis中的数据

imageimageimage

 

解决方案:

这个bug出现的原因1是数据没有存入redis,因为代码逻辑错误,解决这个问题之后,出现了将redis里面的数据解码异常导致无法显示数据的错误,报错为服务器异常,解决办法如下

2.重载类型匹配问题

image

 

问题根源:spring data redis版本2.3.X没有两个重载,所以会强转String类型

解决办法1:将spring data redis版本升级成2.6.X,但是spring data redis 版本和spring boot版本强绑定,比较麻烦

image

换版本之后出现这个报错:maven无法下载/spring boot无法解析spring boot maven 插件

Unresolved plugin: 'org.springframework.boot:spring-boot-maven-plugin:2.6.15'

由于版本问题需要修改的地方比较多,就放弃了这个选项

然后使用了原生 GEORADIUS 命令

发现还是没有显示

于是通过增加日志跟踪确定出现问题的代码位置以及数据形式的变化

最后发现是因为Redis 返回的是「ASCII 字节数组」,但后端当成「List 列表」解析 → 判定为空所以没有数据

核心:手动执行GEORADIUS命令返回的是结构化列表,但Java调用connection.execute直接调用的redis原生命令返回的是原始字节数组

 

最终解决办法还是改成使用redisTemplete的georadius方法

 

3.静态字段上用了 @Resource 注解

在 VoucherOrderServiceImpl 类中,给静态(static)字段加了 @Resource 注解(用于依赖注入),但 Spring 明确不支持「在静态字段上使用 @Resource/@Autowired 注解」,导致 Bean 创建失败,项目启动不了。
 
简单说:Spring 的依赖注入是给「对象(实例)」注入属性,而静态字段属于「类」,不属于对象,所以 Spring 无法给静态字段注入依赖,直接报错。

为什么 Spring 不支持静态字段注入?

 
  1. 核心逻辑:
    • Spring 管理的 Bean 是「实例对象」,依赖注入是给「每个实例对象」分配对应的依赖(比如每个 VoucherOrderServiceImpl 实例都有自己的 stringRedisTemplate);
    • 静态字段属于「类本身」,不属于任何实例,Spring 无法将「实例级别的依赖」注入到「类级别的静态字段」中。
     
  2. 设计原则:
     
    静态字段是全局共享的,而 Spring 的依赖注入是为了实现「松耦合、可复用、可测试」,静态字段会破坏这些特性(比如单元测试时无法替换静态字段的依赖)。
  3. image
  4. image

4.MyBatis-Plus Service 层链式查询问题

bug:List<ShopType> shopTypes = shopTypeService.query().orderByAsc("sort").list();这个代码可以在service里面用,但是不能在test文件里面用,即使是导入了相同的包。

问题:query().orderByAsc("sort").list() 是 MyBatis-Plus Service 层链式查询,测试类中「缺少 Service 层依赖 + 链式查询的正确上下文」,而非单纯 import 包的问题

1. 链式查询query().orderByAsc("sort").list()的生效条件

 
这种写法是 MyBatis-Plus 给继承了IService/ServiceImpl的 Service 类 提供的便捷方法,核心依赖:
  • 类必须是「Service 实现类」(继承ServiceImpl<Mapper, Entity>),或在 Service 类中调用;
  • 底层依赖mybatis-plus-extension包(已导入)。

解决方案:

1.注入shopService

查看代码
 @Autowired
    private IShopService shopService;
    // 2. 注入ShopTypeService
    @Autowired
    private IShopTypeService shopTypeService;

2.改用Mapper层写法

查看代码
@Autowired
private ShopTypeMapper shopTypeMapper;
//  用QueryWrapper+Mapper.selectList()(无Service也能生效)
        QueryWrapper<ShopType> queryWrapper = new QueryWrapper<>();
        queryWrapper.orderByAsc("sort");
        List<ShopType> shopTypes = shopTypeMapper.selectList(queryWrapper);
posted on 2026-03-05 14:18  fafrkvit  阅读(26)  评论(0)    收藏  举报