1. 返数据以及归页面

以写web项目的当儿,controller里的返回值一般分为两种,一种是回到页面,也便是ModeAndView,另一样种植是一直回到数据,比如json格式的数额。

回去一个页面,我们用以一些模板引擎,比如熟知的jsp,模板引擎后面会详细讲解。

回来数据貌似会选返回json数据,我们前面的demo项目受到使用的@RestController就是一个回到数据的注释。

@RestController是一个组成注解,是由@Controller和@ResponseBody组合而成的。
@Controller:将回来值渲染为页面。
@ResponseBody:将赶回值渲染为数据。

2. spring boot支持的沙盘引擎

spring-boot 支持多模板引擎包括:

  • FreeMarker
  • Groovy
  • Thymeleaf (Spring 官网使用这个)
  • Velocity
  • JSP (不引进,jsp在内嵌的servlet容器被运作有一些问题。)

咱俩于叙前后端分离之前,都见面利用Thymeleaf模板引擎,先简单的介绍一下她。

2.1 Thymeleaf模板引擎

Thymeleaf是一个java类库,它是一个xml/xhtml/html5的模板引擎,可以用作mvc的web应用的view层。

Thymeleaf还提供了附加的木块与spring
mvc集成,所以采用ssm框架的啊得采用这个模板引擎。

理所当然想列一下Thymeleaf的用法的,但是感觉微微多,以后哪里用到哪摆好了。

3. 实战

连通下,我们通过一个型,来施行一下点滴栽不同的返结果。

先行看一下说到底的目结构:

 

目结构

3.1 创建项目project_1

  • 选料乘:web Thymeleaf

 

挑选因

3.2 新建一个person类,用来封装数据

package com.example.model;

public class Person {

    private String name;
    private Integer age;

    public Person() {
    }

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }
}

3.3 新建一个ViewController,用来回到一个视图

package com.example.controller;

import com.example.model.Person;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.ArrayList;
import java.util.List;

@Controller
public class ViewController {

    @RequestMapping("/view")
    public String view(Model model){
        Person person = new Person("x", 22);

        List<Person> list = new ArrayList<>();
        list.add(new Person("a", 11));
        list.add(new Person("b", 12));
        list.add(new Person("c", 13));

        model.addAttribute("onePerson", person);
        model.addAttribute("manyPerson", list);

        return "index";

    }
}

3.4 创建index.html,用来接收数据

<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title>test</title>

    <link href="https://cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"/>
    <link href="https://cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap-theme.min.css" rel="stylesheet"/>
</head>

<body>
    <div class="panel panel-primary">
        <div class="panel-heading">
            <h3 class="panel-title">访问model</h3>
        </div>
        <div class="panel-body">

        </div>
    </div>

    <div th:if="${not #lists.isEmpty(manyPerson)}">
        <div class="panel panel-primary">
            <div class="panel-heading">
                <h3 class="panel-title">列表</h3>
            </div>
            <div class="panel-body">
                <ul class="list-group">
                    <li class="list-group-item" th:each="person:${manyPerson}">


                    </li>
                </ul>
            </div>
        </div>
    </div>
</body>
</html>

此处我们利用了Thymeleaf模板引擎来取得后台传来的数码并分析,使用bootstrap框架显示数据。可以观看,Thymeleaf的用法及jsp还是出点像的。可以一直通过${}的形式来取attribute中之数。

每当 spring boot
中,模板引擎默认是开启缓存的,如果改动了页面内容,刷新页面是得不交修改后底情节之。我们得以当application.yml中关闭模板引擎缓存:

spring:
  thymeleaf:
    cache: false

假设需要详细的Thymeleaf模板的以办法教程,可以为本人留言,我看状态来支配是否要描绘一篇。因为自己用底吗非是众,大部分气象本身还是前后端分离之。

3.5 运行项目,浏览器访问http://localhost:8080/view

 

view

好观看,我们中标之在前端获取到了数据。方式就是是拿数据保存在attribute中,然后又前端页面获得。

3.6 修改ViewController中之@Controller为@RestController,重新运行

 

view

咱们修改了诠释,发现结果变了,直接展示了“index”,是为@RestController会直接返回数据,而无是渲染页面,所以直接回了index(这个index,是return语句被的)

3.7 创建DataController,用来直接回数据

package com.example.controller;

import com.example.model.Person;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.List;

@RestController  // 使用RestController注解
public class DataController {

    @RequestMapping("/person")
    public Person person(){
        return new Person("aa", 10);
    }

    @RequestMapping("persons")
    public List<Person> persons(){
        return Arrays.asList(new Person("bb", 11), new Person("cc", 12));
    }
}

3.8 重新运行项目

访问http://localhost:8080/person

 

person

取得了json格式的数

访问http://localhost:8080/persons

 

persons

列表也足以直接渲染为json。

这里需要小心,如果我们方法的返回值是String(参考上面的index),那么回的结果就是若return的字符串,如果方式的返回值是一个目标(person)或者一个成团(list,map等),那么得的结果就是是一个json字符串。spring
boot默认使用jackson来进展辨析。

jackson也是好改也gson或者fastjson的,我们下篇再出口。

3.9 修改DataController中的@RestController为@Controller,重新运行

访问http://localhost:8080/person

 

person


访问http://localhost:8080/persons

 

persons

会晤发现及时点儿只还报错了,因为@Controller注解是渲染视图的,而我们返回的是目标要聚众,不能够一气呵成正常的渲染。

4. 小结

正文主要讲解了spring boot
如何渲染视图和数据,讲解了@Controller和@RestController的区分及用法。如果来啊疑点,请立即联系自己。


自身前写了一个重新认识java系类(还尚无写了,会刻画了的。。),篇幅很丰富,每一样篇稿子大都的来7、8本配,和多人抱怨说看到一半就算无思看了,因为太丰富了,所以
spring boot
这个系类会尽量的短小精悍,每篇文章就谈一个知识点,这样看正在未烦~

作者:cleverfan
链接:https://www.jianshu.com/p/b2f2f09987de
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


https://www.jianshu.com/u/8dc5811b228f

相关文章

网站地图xml地图