JAVA中使用freemark生成自定义文(json、excel、yaml、txt)

本文介绍了在JAVA中利用Freemarker模板引擎动态生成JSON、YAML等配置文件的方法,包括项目路径、JAVA代码示例、FTL模板文件内容以及在生成过程中遇到的问题和解决方案。通过示例,展示了如何处理list遍历和判断,以及解决逗号添加问题。
摘要由CSDN通过智能技术生成

场景:在我们工作中,有时需要生成一些文件,可能它不是一种标准的格式,比如JSON。

目的:配置一个模板,根据前端传入的值动态生成配置文件,并且支持循环判断


项目路径:

这里写图片描述
请无视YamlTest.java和YamlTemplate.ftl


JAVA代码:

package com.ming.freemark.demo;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class YamlTestList {
   
    //模板配置对象
    private Configuration cfg;           
    //Yaml目录
    private static String yamlPath = "resources\\yaml";

    /**
     * 初始化配置
     */
    public void init() {
        cfg = new Configuration();
        File yamlFile = null;
        try {
            yamlFile = new File(yamlPath);
            cfg.setDirectoryForTemplateLoading(yamlFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void process(Map<String, Object> map){
        try {
            Template template = cfg.getTemplate("YamlTemplate2.ftl");
            template.process(map, new FileWriter(new File(yamlPath + "\\test.yaml")));
        } catch (IOException | TemplateException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        YamlTestList test = new YamlTestList();
        test.init();

        //生成一个pod的yaml文件
        Map<String,Object> podMap = new HashMap<String,Object>();
        podMap.put("kind", "Pod");
        podMap.put("apiVersion", "v1");
        podMap.put("metadataName", "test-pod");
        podMap.put("lablesName", "test-pod");
        podMap.put("lablesVersion", "1.0");

        //此处是一个循环 一个pod包含多个微服务组件
        podMap.put("containerName", "tomcat");
        podMap.put("imageName", "tomcatImage");

        //组装一个container里面的port列表
        //一个docker container里面可能有多个组件,比如一个container部署了两个tomcat,则此处是port的列表
        List<Map<String,Object>> portList = new ArrayList<>(); 
        Map<String,Object> portMap1 = new HashMap<String,Object>();
        portMap1.put("containerPort", 8080);
        Map<String,Object> portMap2 = new HashMap<String,Object>();
        portMap2.put("containerPort", 8081);
        portList.add(portMap1);
        portList.add(portMap2);

        podMap.put("portList", portList);
        test.process(podMap);

        // myMap[key]?default(""),这里是判断值是否为null,如果为null,设置默认值为空,freemarker不支持null,如果值为null,会抛出异常报错。
    }
}

ftl模板文件:

{
    "kind": "${kind}",
    "apiVersion"
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值