Freemarker Java8日期类型 兼容性处理

freemarker 版本

<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.28</version>
</dependency>
 代码:

import com.google.common.collect.Maps;
import freemarker.cache.StringTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.SimpleDate;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
import java.io.StringWriter;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.Map;
import java.util.Objects;

public class FreeMarkerUtils {

    private FreeMarkerUtils() {
    }

    public static String parseString(String template, String key, String value) {
        Map<String, Object> param = Maps.newHashMap();
        param.put(key, value);
        return FreeMarkerUtils.parseString(template, param);
    }

    public static String parseString(String template, Object[][] array) {
        Map<String, Object> param = Maps.newHashMap();
        for (Object[] item : array) {
            param.put(Objects.toString(item[0]), item[1]);
        }
        return FreeMarkerUtils.parseString(template, param);
    }

    public static String parseString(String template, Object param) {
        try {
            Configuration cfg = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
            cfg.setObjectWrapper(new CustomObjectWrapper());

            cfg.setNumberFormat("#");
            StringTemplateLoader templateLoader = new StringTemplateLoader();

            templateLoader.putTemplate("template", template);
            cfg.setTemplateLoader(templateLoader);
            StringWriter out = new StringWriter();
            cfg.getTemplate("template").process(param, out);
            return out.toString();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    private static class CustomObjectWrapper extends DefaultObjectWrapper {

        @Override
        public TemplateModel wrap(Object obj) throws TemplateModelException {
            if (obj instanceof LocalDateTime) {
                Timestamp timestamp = Timestamp.valueOf((LocalDateTime) obj);
                return new SimpleDate(timestamp);
            }
            if (obj instanceof LocalDate) {
                Date date = Date.valueOf((LocalDate) obj);
                return new SimpleDate(date);
            }
            if (obj instanceof LocalTime) {
                Time time = Time.valueOf((LocalTime) obj);
                return new SimpleDate(time);
            }
            if (obj instanceof Instant) {
                LocalDateTime localTime = LocalDateTime.ofInstant((Instant) obj, ZoneId.systemDefault());
                Timestamp time = Timestamp.valueOf(localTime);
                return new SimpleDate(time);
            }
            return super.wrap(obj);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值