• Java之~反射,String类型模板匹配类属性方法


    方法一:
    //测试模板
    @Test
    public void getTest(){
    
        //先获取模板
        String temp ="你预约了${name}医院,请及时取号,在${startTime}-${endTime}前到!";
        TestDTO testDTO = new TestDTO();
        testDTO.setName("青岛");
        testDTO.setStartTime("11:30");
        testDTO.setEndTime("14:50");
        //调用方法
        String templateInfo = this.getTemplateInfo(temp, testDTO);
        System.out.println("消息模板内容----:"+templateInfo);
    }
    
    
    /**
     * 获取模板信息方法
     * @param templateInfo 模板
     * @param classObject 要拼接的类
     * @return
     */
    public String getTemplateInfo(String templateInfo,Object classObject){
    
        Field[] fields = classObject.getClass().getDeclaredFields();
        try {
            for (Field field : fields) {
                field.setAccessible(true);
                String fieldName = field.getName();
                String fieldValue = null == field.get(classObject) ? "" : field.get(classObject) + "" ;
                if (templateInfo.contains(fieldName)){
                    String nameStr = "${" + fieldName + "}";
                    templateInfo = templateInfo.replace(nameStr, fieldValue);
                }
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return templateInfo;
    }
    
    //要铺数据的类
    @Data
    class TestDTO{
        private String name;
        private String startTime;
        private String endTime;
    }
    打印的匹配结果: 
    

    方法二:(适用于固定几个值的)

    用的hutool的工具类

    import cn.hutool.core.util.StrUtil;
    1. //测试模板
    2. @Test
    3. public void getTest1(){
    4. //先获取模板
    5. String temp ="你预约了{}医院,请及时取号,在{}-{}前到!";
    6. //调用方法
    7. String templateInfo = StrUtil.format(temp,"青岛","2:00","3:00");
    8. System.out.println("消息模板内容----:"+templateInfo);
    9. }

    打印的匹配结果:

    方法三:(推荐)

    用的hutool的工具类

    //测试模板
    @Test
    public void getTest2(){
    
        //先获取模板
        String temp ="你预约了{name}医院,请及时取号,在{startTime}-{endTime}前到!";
    
        TestDTO testDTO = new TestDTO();
        testDTO.setName("青岛医院");
        testDTO.setStartTime("11:30");
        testDTO.setEndTime("14:50");
        // bean转map
        Map map = JSON.parseObject(JSON.toJSONString(testDTO), Map.class);
        //调用方法
        String templateInfo = StrUtil.format(temp,map);
        System.out.println("消息模板内容----:"+templateInfo);
    }

    打印结果:

     

  • 相关阅读:
    暑期2022.08算法讲解
    P4 开发实践 — NG-SDN Tutorial — Exercise 5: IPv6 Routing
    Linux命令--tree--使用/详解/实例
    并查集路径压缩算法
    凭借这份180道最全高级岗面试题及答案,成功入职,美团定级T4
    装饰模式&职责链模式
    Vue切换回页面可见状态后,避免执行多次滚动定位的动画
    微软商店无法访问
    WAF简介
    渗透测试-内网横向MS-17010利用方法总结
  • 原文地址:https://blog.csdn.net/haopingping_88/article/details/126389751