Spring Boot Velocity转换器

简介

这是一个用于将Java、Vue、TS和XML文件转换为Velocity模板。这个starter可以帮助开发者快速实现代码生成功能,特别适用于需要从实体类生成VO类、表单类等场景。

特性

  • 支持多种文件类型转换:Java、Vue、TS、XML
  • 自动检测文件类型并应用相应的转换规则
  • 支持实体类与VO类的转换
  • 支持包名、模块名的自定义替换
  • 支持批量处理(ZIP文件)
  • 自动变量替换和模板生成

安装

在您的Spring Boot项目的pom.xml中添加以下依赖

Spring Boot 2(java8)

      <dependency>
    <groupId>io.github.liyao52033</groupId>
    <artifactId>velocityConverter-spring-boot-starter</artifactId>
    <version>1.2.0</version>
</dependency>

<dependency>
    <groupId>io.github.liyao52033</groupId>
    <artifactId>ErrorCode-spring-boot-starter</artifactId>
    <version>1.2.0</version>
</dependency>
    

Spring Boot 3(java17)

      <dependency>
    <groupId>io.github.liyao52033</groupId>
    <artifactId>liyao-spring-boot3-starter-velocityConverter</artifactId>
    <version>1.2.0</version>
</dependency>

<dependency>
    <groupId>io.github.liyao52033</groupId>
    <artifactId>liyao-spring-boot3-starter-ErrorCode</artifactId>
    <version>1.2.0</version>
</dependency>
    

配置

该starter会自动配置所需的Bean,包括:

  • TemplateConverter:核心转换器,处理文件转换逻辑
  • TemplateConverterConfig:转换配置,包含转换规则和路径设置
  • TemplateVariableReplacer:变量替换器,处理模板中的变量替换

使用方法

基本用法

      @RestController
@RequestMapping("/api/template")
public class TemplateController {

    @Resource
    private TemplateConverter templateConverter;
    
  /**
     * Java文件转Velocity模板
     * @param file 文件
     * @param entityName 实体名
     * @param packageName 包名
     * @param moduleName 模块名
     * @param outputFileName 输出文件名
     * @return 转换后的模板文件
     */
    @PostMapping( "/convertJavaToVelocity")
    @Operation(summary = "Java文件转Velocity模板")
    public BaseResponse<Map<String, String>> convertJavaToVelocity(
            @RequestParam("file") MultipartFile file,
            @RequestParam(value = "entityName") String entityName,
            @RequestParam(value = "packageName") String packageName,
            @RequestParam(value = "moduleName") String moduleName,
            @RequestParam(value = "outputFileName", required = false) String outputFileName)
    {
        return templateConverter.convertJavaToVelocity(file, entityName, packageName, moduleName, outputFileName);
    }

    /**
     * Zip文件转Velocity模板
     * @param file 文件
     * @param entityName 实体名
     * @param packageName 包名
     * @param moduleName 模块名
     * @param outputFileName 输出文件名
     * @return 转换后的模板文件
     */
    @PostMapping( "/convertZipToVelocity")
    @Operation(summary = "Zip文件转Velocity模板")
    public BaseResponse<List<Map<String, String>>> convertZipToVelocity(
            @RequestParam("file") MultipartFile file,
            @RequestParam(value = "entityName") String entityName,
            @RequestParam(value = "packageName") String packageName,
            @RequestParam(value = "moduleName") String moduleName,
            @RequestParam(value = "outputFileName", required = false) String outputFileName)
    {
        return templateConverter.convertZipToVelocity(file, entityName, packageName, moduleName, outputFileName);
    }
}
    

参数说明

  • file:要转换的文件(Java、Vue、TS、XML)或ZIP压缩包
  • entityName:实体类名称,用于变量替换
  • packageName:包名,用于替换原文件中的包声明
  • moduleName:模块名,用于构建包路径
  • outputFileName:(可选)输出文件名,不指定时使用原文件名

文件类型支持

转换器会自动检测以下文件类型并应用相应的转换规则:

  • Java:处理类定义、字段、方法等
  • Vue:处理组件、模板、脚本等
  • TypeScript:处理类、接口、导入语句等
  • XML:处理标签、属性等

批量处理

对于需要批量转换的场景,可以将多个文件打包成ZIP文件上传,系统会自动处理所有支持的文件类型。

高级功能

自定义转换规则

如果需要自定义转换规则,可以扩展TemplateConverterConfig类:

      @Configuration
public class CustomTemplateConverterConfig extends TemplateConverterConfig {
    
    @Override
    public String convertJavaToVelocity(String javaContent, String entityName, String packageName, String moduleName) {
        // 先调用父类方法进行基本转换
        String result = super.convertJavaToVelocity(javaContent, entityName, packageName, moduleName);
        
        // 添加自定义转换逻辑
        result = customizeTemplate(result);
        
        return result;
    }
    
    private String customizeTemplate(String content) {
        // 实现自定义转换逻辑
        return content;
    }
}
    

自定义变量替换

如果需要自定义变量替换规则,可以扩展TemplateVariableReplacer类:

      @Configuration
public class CustomTemplateVariableReplacer extends TemplateVariableReplacer {
    
    @Override
    public String replace(String content, String entityName) {
        // 先调用父类方法进行基本替换
        String result = super.replace(content, entityName);
        
        // 添加自定义替换逻辑
        result = customizeReplacement(result, entityName);
        
        return result;
    }
    
    private String customizeReplacement(String content, String entityName) {
        // 实现自定义替换逻辑
        return content;
    }
}
    

声明

作者: liyao

版权:本博客所有文章除特别声明外,均采用CCBY-NC-SA4.O许可协议。转载请注明!

最后更新于 2025-09-30 20:31 history