---
date: 2025-04-15 10:39:21
title: 模板转换器
permalink: /pages/da4bbe
top: 3
tags:
  - Spring Boot
author:
  name: 华总
  link: https://xiaoying.org.cn
categories:
  - 后端
  - 功能扩展

---

# Spring Boot  Velocity转换器

## 简介

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

## 特性

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

## 安装

::: tip 

依赖可能非最新版本，请前往maven获取最新版本

[Spring Boot 2](https://central.sonatype.com/artifact/io.github.liyao52033/velocityConverter-spring-boot-starter)地址

[Spring Boot 3](https://central.sonatype.com/artifact/io.github.liyao52033/liyao-spring-boot3-starter-velocityConverter)地址

:::

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

Spring Boot 2(java8)

```xml
<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)

```xml
<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`：变量替换器，处理模板中的变量替换

## 使用方法

### 基本用法

```java
@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`类：

```java
@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`类：

```java
@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;
    }
}
```
