• 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";
        }
    }
    
  • 相关阅读:
    深度解析MVC3中的ModelValidator及相关unobtrusiveJs的验证(一)
    深度解析Asp.net中的验证和Mvc对它的继承
    C# WebBrowser保存页面为图片
    Vue-axios需要注意的几个点
    C# 为什么说事件是一种特殊的委托
    C# event 事件-2
    C# event 事件
    初始Redis与简单使用
    泛型的运用(用于查询数据后DataTable转实体类)
    C# 初识接口 Interface
  • 原文地址:https://www.cnblogs.com/mozq/p/11361892.html
Copyright © 2020-2023  润新知