springboot 整合 freemarker

springboot 整合 freemarker

依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.6.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>com.squareup.okhttp3</groupId>
        <artifactId>okhttp</artifactId>
        <version>3.9.1</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
</dependencies>

application.yml

application 参数路径

server:
  port: 8001
spring:
  application:
    name: test-freemarker
  freemarker:
    cache: false
    settings:
      template_update_delay: 0
    template-loader-path: classpath:/templates/

启动类

@SpringBootApplication
public class FreemarkerApplication {
    public static void main(String[] args) {
        SpringApplication.run(FreemarkerApplication.class, args);
    }
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
    }
}

模板文件

<!DOCTYPE html>
<!-- resources/templates/test2.ftl -->
<html>
<head lang="en">
    <meta charset="UTF-8"/>
    <title></title>
</head>
<body>
    <table>
        <tr>
            <td>序号</td>
            <td>姓名</td>
            <td>年龄</td>
            <td>金钱</td>
            <td>出生日期</td>
        </tr>
        <#if students??>
            <#list students as stu>
                <tr>
                    <td>${stu_index}</td>
                    <td <#if (stu.name == '刘备')>style="background-color: #108cee"</#if> >${stu.name}</td>
                    <td <#if (stu.age < 20)>style="background-color: #108cee"</#if>>${stu.age}</td>
                    <td>${stu.money}</td>
                    <td>${stu.birthday?date},${stu.birthday?time},${stu.birthday?string("yyyy年MM月dd日")}</td>
                </tr>
            </#list>
        </#if>
    </table>
姓名:${stuMap['stu1'].name}
年龄: ${stuMap.stu1.age}
<#list stuMap?keys as k>
    姓名: ${stuMap[k].name}
    年龄: ${stuMap[k].age}
</#list>
${stuMap???c}//判断是否存在,和使用 ?c 输出字符串
${students???c}
${(mozq.bank.address)!'中国建设银行'}//默认值方式处理空值

${students?size}//集合大小
<#assign text="{'bank':'中国农业银行', 'address':'北大街'}">
<#assign data=text?eval>
开户行: ${data.bank} 地址: ${data.address}
${123456123?c}//不显示逗号分隔
${123456123}//默认显示逗号分隔
</body>
</html>
<!DOCTYPE html>
<!-- resources/templates/index_banner.ftl -->
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div class="banner-roll">
            <#if model??>
                <#list model as item>
                    <div class="item" style="background-image: url(${item.value});"></div>
                    </#list>
                </#if>
        </div>
        </div>
    <script type="text/javascript">
        //...
    </script>
    </body>
</html>

Controller

package com.mozq.springboot.freemarker.controller;

import com.mozq.springboot.freemarker.model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.client.RestTemplate;

import java.util.*;

@Controller //注意不要使用 @RestController
@RequestMapping("/freemarker")
public class FreeMarkerController {

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/banner")
    public String banner(Map<String,Object> map){
        String dataUrl = "http://localhost:31001/cms/config/getmodel/5a791725dd573c3574ee333f";
        ResponseEntity<Map> entity = restTemplate.getForEntity(dataUrl, Map.class);
        Map body = entity.getBody();
        map.putAll((Map<? extends String, ?>) body);
        //        restTemplate.getForEntity("")
        return "index_banner";
    }

    @RequestMapping("/test2")
    public String test2(Map<String,Object> map){
        Student stu1 = new Student();
        stu1.setName("刘备");
        stu1.setAge(18);
        stu1.setBirthday(new Date());
        stu1.setMoney(22225.8F);

        Student stu2 = new Student();
        stu2.setName("孙权");
        stu2.setAge(20);
        stu2.setBirthday(new Date());
        stu2.setMoney(24525.8F);
        stu2.setBestFriend(stu1);

        List<Student> students = new ArrayList<>();
        students.add(stu1);
        students.add(stu2);
        //模板使用的数据
        map.put("students", students);

        HashMap<String, Student> stuMap = new HashMap<>();
        stuMap.put("stu1", stu1);
        stuMap.put("stu2", stu2);
        map.put("stuMap", stuMap);
        //返回模板的位置,基于 resources/templates
        return "test2";
    }
}
原文地址:https://www.cnblogs.com/mozq/p/11361892.html