SpringBoot下使用Thymeleaf创建RestFul风格的CURD

为什么使用Restful风格;

  • 强调HTTP应当以资源为中心,并且规范了资源URI的风格;
  • 规范了HTTP请求动作(PUT,POST等)的使用,具有对应的语义;

遵循REST规范的Web应用将会获得下面好处:

URL具有很强可读性的,具有自描述性;

资源描述与视图的松耦合;

1.环境准备

导入web,thymeleaf启动器和jquery的jar

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

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

<dependency>
   <groupId>org.webjars</groupId>
   <artifactId>jquery</artifactId>
   <version>3.0.0</version>
</dependency>

2.创建Vo层

public class Book {
    String isbn;
    String name;
    int price;
    Date publishDate;
    public Book(String isbn, String name, int price, Date publishDate) {
        this.isbn = isbn;
        this.name = name;
        this.price = price;
        this.publishDate = publishDate;
    }

    public Date getPublishDate() {
        return publishDate;
    }

    public void setPublishDate(Date publishDate) {
        this.publishDate = publishDate;
    }
    public Book(String isbn, String name, int price) {
        this.isbn = isbn;
        this.name = name;
        this.price = price;
    }
    public Book() {
    }
    public String getIsbn() {
        return isbn;
    }
    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }
    @Override
    public String toString() {
        return "Book{" +
                "isbn='" + isbn + '\'' +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", publishDate=" + publishDate +
                '}';
    }
}

3.创建Service层(模拟)

static Map<String,Book> map=new HashMap<String,Book>();

//初始数据
static{
    map.put("123456",new Book("123456","世界是平的",45,new Date()));
    map.put("123457",new Book("123457","正年的奇迹",75,new Date()));
    map.put("123458",new Book("123458","浪潮之耟",69,new Date()));
    map.put("123459",new Book("123459","数学 之美丽",58,new Date()));
}

public static void save(Book book){
    map.put(book.getIsbn(),book);
}

public static void update(Book book){
    map.put(book.getIsbn(),book);
}

public static void delete(String isbn){
    map.remove(isbn);
}

public static List<Book> getAll(){
    return new ArrayList<Book>(map.values());
}

public static Book getBook(String isbn){
    return map.get(isbn);
}

4.创建Handler

@Controller
@RequestMapping("/book")
public class BookHandler {
    @GetMapping("")
    public String getAll(Map<String,Object> map){
        map.put("list", BookService.getAll());
        System.out.println("查询所有");
        System.out.println(map);
        return "list";
    }

    @GetMapping("/{isbn}")
    public String getBook(Map<String,Object> map,@PathVariable("isbn") String isbn){
        map.put("book", BookService.getBook(isbn));
        System.out.println("查询一个"+map);
        return "book";
    }

    @DeleteMapping("/{isbn}")
    public String delete(@PathVariable("isbn") String isbn){
        BookService.delete(isbn);
        System.out.println("删除一个"+isbn);
        return "redirect:/book";
    }

    @PutMapping("")
    public String update(Map<String,Object> map,Book book){
        BookService.update(book);
        System.out.println("修改一个:"+book);
        return "redirect:/book";
    }

    @PostMapping("")
    public String save(Map<String,Object> map,Book book){
        BookService.save(book);
        System.out.println("增加一个:"+book);
        return "redirect:/book";
    }

    @GetMapping("/index")
    public String index(){
        return "book";
    }
}

5.查询列表页面(list.html)

此页面放在template文件夹下;

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<table th:border="1" width="80%">
    <tr>
        <td>序号</td>
        <td>isbn</td>
        <td>name</td>
        <td>price</td>
        <td>publishDate</td>
        <td>操作</td>
    </tr>

    <tr th:each="book:${list}">
        <td th:text="${book.isbn}"></td>
        <td th:text="${book.isbn}"></td>
        <td th:text="${book.name}"></td>
        <td th:text="${book.price}"></td>
        <td th:text="${#dates.format(book.publishDate,'yyyy-MM-dd')}"></td>
        <td>
            <a th:href="@{/book/}+${book.isbn}">编辑</a>
            <button th:attr="del_url=@{/book/}+${book.isbn}" name="del_button">删除</button>
        </td>
    </tr>
</table>

<a th:href="@{/book/index}" th:value="添加新图书">添加新图书</a>
<!--删除操作-->
<form method="post" id="form_delete">
    <input type="hidden" name="_method" value="delete"/>
</form>

<!--导入jquery.js-->
<script type="text/javascript" th:src="@{/webjars/jquery/3.0.0/jquery.js}"></script>

<!--删除操作-->
<script>
    $(function () {
        alert("start....");
        $("button[name='del_button']").click(function () {
            alert($(this).attr("del_url"));
            $("#form_delete").prop("action", $(this).attr("del_url")).submit();
        });
    });
</script>
</body>
</html>

6.添加和修改图书页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form th:action="@{/book/}" method="post">
        <!--判断book是否为空来确定添加还是修改-->
        <input type="hidden" name="_method" th:value="put" th:if="${book!=null}" ><br/>

        <input type="text" name="isbn" th:value="${book!=null? book.isbn : ''}" placeholder="编号"><br/>
        <input type="text" name="name" th:value="${book!=null? book.name : ''}" placeholder="书名"><br/>
        <input type="text" name="price" th:value="${book!=null? book.price : ''}" placeholder="价格"><br/>
        <input type="text" name="publishDate" th:value="${book!=null? #dates.format(book.publishDate,'yyyy-MM-dd'): ''}" placeholder="出版日期"><br/>
        <input type="submit"  value="提交"/>
    </form>
</body>
</html>

7.配置文件

猜你喜欢

转载自blog.csdn.net/qqyb2000/article/details/93459926