【springboot学习第二天】用Restful 风格重构

Restful
srpingboot
Java

相关文章


IDEA创建Springboot项目
hello,springboot
整合Mybatis实现文件上传


Restful风格是什么

一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

我以前做web开发的时候CRUD习惯于用这样的:

    http    2行
/list?name=xxx

那么用上了高大上的Restful风格呢,就变成这样

    http    2行
/list

没错,就是一个URL处理不同的业务,这些都是我们在后端根据前端传来的method来决定使用哪个业务逻辑。

接下来我们重构之前写的文件上传功能
upload.jsp

    jsp    17行
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>上传</title>
</head>
<body>
<div align="center">

    <form action="/file" method="post" enctype="multipart/form-data">
        <input type="hidden" name="_method" value="PUT">
        选择图片:<input type="file" name="file" accept="*/*">
        <input type="submit" value="上传">
    </form>
</div>
</body>
</html>

在这里我们加了一个

    html    2行
<input type="hidden" name="_method" value="PUT">

意思是告诉控制器,这是一个PUT请求

showFile.jsp

    jsp    37行
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>文件上传成功</title>
</head>
<body>
<div align="center">
    <a href="/file">上传文件</a>
</div>
<table align="center">
    <tr>
        <td>序号</td>
        <td>文件名</td>
        <td>创建日期</td>
        <td>操作</td>
    </tr>
    <c:forEach items="${page.list}" var="page" varStatus="st">
        <tr>
            <td>${page.id}</td>
            <td>${page.filename}</td>
            <td>${page.date}</td>
            <td><strong><a href="/file/${page.id}">重命名</a> | <a href="/file/${page.id}">删除</a> </strong></td>
        </tr>
    </c:forEach>
</table>
<br>
<div align="center">
    <a href="?start=1">首页</a>
    <a href="?start=${page.pageNum-1}">上一页</a>
    <a href="?start=${page.pageNum +1}">下一页</a>
    <a href="?start=${page.pages}">尾页</a>
</div>

</body>
</html>

这里我们将上传的链接改成了这样

    html    2行
<a href="/file">上传文件</a>

后续的删除、重命名都将是这样的

    html    2行
<a href="/file/${page.id}">重命名</a> | <a href="/file/${page.id}">删除</a>

今天比较晚了,就不展开了

UploadController.java

    java    52行
@Controller
public class UploadController {    
@Autowired
    FileMapper fileMapper;    
    @GetMapping("/file")    
    public String upload()throws Exception{        return "upload";
    }    
    @PutMapping("/file")    
    public String upload(Model model, HttpServletRequest request, @RequestParam("file")MultipartFile file) throws Exception{        
    try {
            String fileName = file.getOriginalFilename();
            String finalfilename = fileName.substring(fileName.lastIndexOf("."));
            String ext = System.currentTimeMillis()+finalfilename;

            String destFileName = request.getServletContext().getRealPath("") + "upload" + File.separator+ext;
            File destFile = new File(destFileName);
            destFile.getParentFile().mkdir();
            file.transferTo(destFile);            //保存文件名到数据库
            FilePojo filePojo = new FilePojo();            
            long date = System.currentTimeMillis();
            Date time = new Date(date);            
            //String name = System.currentTimeMillis() + "\\" + finalfilename;
            filePojo.setFilename(ext);
            filePojo.setDate(time);
            fileMapper.insert(filePojo);
        } catch (Exception e) {
            e.printStackTrace();            
            return "上传失败" + e.getMessage();
        }        return "redirect:showFile";
    }
}

通过@GetMapping和@PutMapping让Controller识别用户来访的method是什么。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Copyright bcfou.com.Some Rights Reserved.