Thymeleaf模版

118 阅读1分钟

1.官网文档

Introducing Thymeleaf

1.引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2.初始化引擎

 public class ThymeleafUtils {

    private static TemplateEngine engine;

    static {
        engine = new SpringTemplateEngine();
        StringTemplateResolver templateResolver = new StringTemplateResolver();
        templateResolver.setTemplateMode(TemplateMode.JAVASCRIPT);
        templateResolver.setCacheable(false);
        engine.addTemplateResolver(templateResolver);
    }

    public static String process(Map<String, Object> variables, String template) {
        // 1.设置上下文
        Context context = new Context();
        context.setVariables(variables);

        // 2.填充模版
        return engine.process(template, context);
    }

}

3.使用

3.1 目标

{  
    "name":"yonsh",  
    "age":18,  
    "score":"{\"math\":100,\"english\":99,\"science\":99}",  
    "friends":[  
        "jack",  
        "mark",  
        "vinn"  
    ]  
}
  • 将上述name映射为新的last_name
  • score字段中的内容打平
  • friends字段设置默认的年龄

3.2模版

{
    [# th:with="gen=${T(java.util.UUID).randomUUID().toString()}" ]
        "id":[[ ${gen} ]],
    [/]
        "first_name": [[ ${#strings.isEmpty(name)} ? '' : ${name} ]],
        "age": [[ ${#objects.nullSafe(age, 16)} ]],
    [# th:with="parsed=${T(com.alibaba.fastjson2.JSON).parseObject(score)}" ]
        "math": [[ ${parsed?.get('math')} ]],
        "english": [[ ${parsed?.get('english')} ]],
        "science": [[ ${parsed?.get('science')} ]],
    [/]
        "friends":[
            [# th:each="item,iterStat : ${friends}" ]
               { [[ ${item} ]] : [[ ${age} ]] }[( ${iterStat.last} ? '' : ',' )]
            [/]   
        ]
}

3.3测试代码

@Test
public void test001(){
    String template = "{\n" +
            "    [# th:with="uuid=${T(java.util.UUID).randomUUID().toString()}" ]\n" +
            "        "id":[[ ${uuid} ]],\n" +
            "    [/]\n" +
            "        "first_name": [[ ${#strings.isEmpty(name)} ? '' : ${name} ]],\n" +
            "        "age": [[ ${#objects.nullSafe(age, 16)} ]],\n" +
            "    [# th:with="parsed=${T(com.alibaba.fastjson2.JSON).parseObject(score)}" ]\n" +
            "        "math": [[ ${parsed?.get('math')} ]],\n" +
            "        "english": [[ ${parsed?.get('english')} ]],\n" +
            "        "science": [[ ${parsed?.get('science')} ]],\n" +
            "    [/]\n" +
            "        "friends":[\n" +
            "            [# th:each="item,iterStat : ${friends}" ]\n" +
            "               { [[ ${item} ]] : [[ ${age} ]] }[( ${iterStat.last} ? '' : ',' )]\n" +
            "            [/]   \n" +
            "        ]\n" +
            "}";
    String data = "{\n" +
            "    "name":"yonsh",\n" +
            "    "age":18,\n" +
            "    "score":"{\"math\":100,\"english\":99,\"science\":99}",\n" +
            "    "friends":[\n" +
            "        "jack",\n" +
            "        "mark",\n" +
            "        "vinn"\n" +
            "    ]\n" +
            "}";
    JSONObject map = JSON.parseObject(data);
    String process = ThymeleafUtils.process(map, template);
    log.info(process);
}

3.4输出内容

{
    
        "id":"c80c33e8-3716-4b8c-ac99-721e5e1e52a5",
    
        "first_name": "yonsh",
        "age": 18,
    
        "math": 100,
        "english": 99,
        "science": 99,
    
        "friends":[
            
               { "jack" : 18 },
               { "mark" : 18 },
               { "vinn" : 18 }
               
        ]
}