Files
hzdyjs/docs/变更管理/code-adjust-record-2025-01-26-企业管理转换器注解缺失修复.md
T
2025-07-26 15:29:31 +08:00

3.2 KiB
Raw Blame History

企业管理转换器注解缺失修复

变更时间: 2025-01-26 13:00:00
变更人员: Cursor AI
问题类型: MapStruct转换器生成问题

🔴 问题描述

用户反馈企业管理页面持续出现错误:

cannot find converter from ZsjyEnterprise to ZsjyEnterpriseVo

前面的修复(字段一致性、包路径)没有完全解决问题。

🔍 根本原因分析

最终发现的根本原因

通过深入分析其他模块的实现,发现了真正的问题:

缺少MapStruct注解配置!

其他成功生成转换器的类都使用了@AutoMapper注解:

  • @AutoMapper(target = Entity.class) - 用于VO类
  • @AutoMapper(target = Entity.class, reverseConvertGenerate = false) - 用于BO类

而ZsjyEnterprise相关的BO和VO类都缺少这个注解。

✅ 完整解决方案

1. 添加@AutoMapper注解到BO类

文件: ZsjyEnterpriseBo.java

import io.github.linpeilie.annotations.AutoMapper;
import org.dromara.zsjy.domain.ZsjyEnterprise;

@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ZsjyEnterprise.class, reverseConvertGenerate = false)
public class ZsjyEnterpriseBo extends BaseEntity {

2. 添加@AutoMapper注解到VO类

文件: ZsjyEnterpriseVo.java

import io.github.linpeilie.annotations.AutoMapper;
import org.dromara.zsjy.domain.ZsjyEnterprise;

@Data
@AutoMapper(target = ZsjyEnterprise.class)
public class ZsjyEnterpriseVo implements Serializable {

3. 同样处理其他相关类

  • ZsjyJobPositionBo.java - 添加 @AutoMapper
  • ZsjyJobPositionVo.java - 添加 @AutoMapper
  • ZsjyRecruitmentPosterBo.java - 添加 @AutoMapper
  • ZsjyRecruitmentPosterVo.java - 添加 @AutoMapper

4. 重新编译项目

cd ruoyi-modules/ruoyi-zsjy
mvn clean compile -DskipTests

✅ 验证结果

生成的转换器类

编译后成功生成了以下转换器:

  • ZsjyEnterpriseToZsjyEnterpriseVoMapper
  • ZsjyEnterpriseVoToZsjyEnterpriseMapper
  • ZsjyEnterpriseBoToZsjyEnterpriseMapper
  • 以及它们的实现类 (*MapperImpl)

🎯 问题总结

完整的修复包括三个层面:

  1. 字段一致性 - Entity和VO必须字段匹配(已修复)
  2. 包路径结构 - 所有实体类在同一层级(已修复)
  3. MapStruct注解 - 必须添加@AutoMapper注解(本次修复)

MapStruct-Plus工作原理:

  • 编译时扫描带有@AutoMapper注解的类
  • 自动生成转换器接口和实现类
  • 注册到Spring容器供MapstructUtils使用

📝 经验教训

  1. 完整检查:不仅要检查字段和包路径,还要检查注解配置
  2. 参考模板:新增实体时参考其他模块的实现模式
  3. 注解规范:
    • VO类:@AutoMapper(target = Entity.class)
    • BO类:@AutoMapper(target = Entity.class, reverseConvertGenerate = false)
  4. 编译验证:修改后检查target目录是否生成了转换器类

✅ 最终状态

  • 🔥 注解配置完整:所有BO和VO类都有正确的@AutoMapper注解
  • 🔥 转换器生成成功:编译后生成了所有必要的转换器类
  • 🔥 服务重启后正常:对象转换功能完全恢复

这次修复彻底解决了cannot find converter错误!