JAVA集成velocity实现对已有模板替换(占位符变量)替换

 

 

平时我们如果有一些简单的模板替换需求,比如有个txt文件,或者代码生成模板文件 要根据传入的变量替换成具体的值 就可以使用这个框架

如果是太复杂的 比如替换word模板这种的,可以使用freemaker,参考:https://www.cnblogs.com/pxblog/p/12790904.html

 

依赖

 <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>

 

 

把模板文件放在resource底下 ,命名改成以.vm结尾

template.txt.vm 内容如下

{name},你好

 

 

java类

VelocityInitializer.java

复制代码
import org.apache.velocity.app.Velocity;

import java.util.Properties;

/**
 * VelocityEngine工厂
 */
public class VelocityInitializer {
    /**
     * 初始化vm方法
     */
    public static void initVelocity() {
        Properties p = new Properties();
        try {
            // 加载classpath目录下的vm文件
            p.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
            // 定义字符集
            p.setProperty("input.encoding", "UTF-8");
            p.setProperty("output.encoding", "UTF-8");
            // 初始化Velocity引擎,指定配置Properties
            Velocity.init(p);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
复制代码

 

 

使用方式

复制代码
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;

import java.io.StringWriter;

public class VelocityUtils {


    /**
     * 设置模板变量信息
     *
     * @param name 模板的变量值,这里也可以传对象 传对象的话 模板就需要使用${对象名.属性名}
     * @return
     */
    public static VelocityContext prepareContext(String name) {
        VelocityContext velocityContext = new VelocityContext();
        velocityContext.put("name", name);
        return velocityContext;
    }


    /**
     * 生成模板,使用方式
     *
     * @param name
     * @return
     */
    public static void generateTemplate(String name) {
            VelocityInitializer.initVelocity();

            //设置模板数据
            VelocityContext context = prepareContext(name);


            StringWriter sw = new StringWriter();

            //这里是模板存放的路径,如果是resource底下,直接这样写就可以
            Template tpl = Velocity.getTemplate("template.txt.vm", "UTF-8");

            //填充模板数据
            tpl.merge(context, sw);

            //这个就是变量替换后的模板内容,可以根据自己需求增加后面逻辑
            String template = sw.toString();

    }
}
复制代码

 

 

velocity一些语法

遍历,判断遍历是不是最后一个元素,不是加","      

#foreach($url in $urls)
    "${url}"#if($foreach.count != $urls.size()),#end
  #end

 

posted @   yvioo  阅读(997)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2022-07-10 播放m3u8视频页面代码简单demo及一些测试播放地址
2021-07-10 SpringBoot 设置服务一启动就执行(启动执行)、初始化数据
2021-07-10 JAVA日期Date格式转corn表达式
2021-07-10 SpringBoot整合quartz框架启动定时任务报错:the given trigger will never fire.
点击右上角即可分享
微信分享提示