欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring MVC开发RESTful风格的URI

程序员文章站 2024-03-25 19:21:52
...

一、写在前面

RESTful结构可参考博文:https://blog.csdn.net/codejas/article/details/79799386

我们知道在HTTP 协议中,有四种操作方式的动作:GET、POST、PUT和DELETE,分别对应四种基本的操作。GET 用来获取资源,POST 用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE 用来删除资源。

关于RESTful 风格的URI 标准写法如下:

GET:/restUrl/{id}

POST:/restUrl

PUT:/restUrl/{id}

DELETE:/restUrl/{id}

浏览器的form 表单只支持GET 与POST 方式的请求,对于PUT与DELETE 并不支持,在Spring MVC中提供了一个过滤器(HiddenHttpMethodFilter),可以通过该过滤器将POST 形式的请求转化为PUT 与DELETE 形式的请求。

二、在Spring MVC中开发RESTful风格的URI

2.1步骤

1.在web.xml中配置HiddenHttpMethodFilter 过滤器

2.将POST 请求转换为DELETE 与PUT请求,即在发送POST 请求时,需要携带一个name="_method" 的隐藏域,值为对应的DELETE 与PUT

2.2代码实现

1.在web.xml中配置HiddenHttpMethodFilter 过滤器

    <filter>
        <filter-name>hiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>hiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

2.编写前端代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>test</title>
</head>
<body>
    <!--
        默认为'GET' 请求
    -->
    <a href="user/1">test GET</a><br>

    <!--
        通过表单指定请求的格式为'POST'
    --> 
    <form action="user" method="post">
        <input type="submit" value="test POST"/>
    </form><br>

    <!--
        通过隐藏域将表单'POST' 请求格式转化为'PUT'
    -->
    <form action="user/1" method="post">
        <input type="hidden" name="_method" value="PUT"/>
        <input type="submit" value="test POST"/>
    </form><br>

    <!--
        通过隐藏域将表单'POST' 请求格式转化为'DELETE'
    -->
    <form action="user/1" method="post">
        <input type="hidden" name="_method" value="DELETE"/>
        <input type="submit" value="test POST"/>
    </form><br>
</body>
</html>

3.编写控制器代码

@Controller
public class TestController {

    private static final String SUCCESS = "success";

    /**
     * 根据id 获取用户信息
     * @RequestMapping 默认处理'GET'形式的请求
     * @PathVariable 用于获取请求占位符中的值,并绑定到'id' 中
     */
    @RequestMapping("/user/{id}")
    public String testGet(@PathVariable(value = "id")Integer id) {
        // 可以根据id 调用对应的服务接口 ........
        return SUCCESS;
    }

    /**
     * 新增用户,可以指定接收的参数类型
     * 这里简单的实现一下
     * 在@RequestMapping 中指定方法为'POST'
     */
    @RequestMapping(value = "/user", method = RequestMethod.POST)
    public String testPost(){
        // 在开发的过程中可以根据需求调用对应的服务接口
        return SUCCESS;
    }

    /**
     * 根据id 修改用户信息
     * 在@RequestMapping 中指定方法为'PUT'
     */
    @RequestMapping(value = "/user/{id}", method = RequestMethod.PUT)
    public String testPut(@PathVariable(value = "id")Integer id) {
        // 根据id 调用对应的服务接口 ........
        return SUCCESS;
    }

    /**
     * 根据id 删除用户
     * 在@RequestMapping 中指定方法为'DELETE'
     */
    @RequestMapping(value = "/user/{id}", method = RequestMethod.DELETE)
    public String testDelete(@PathVariable(value = "id")Integer id) {
        // 根据id 调用对应的服务接口 ........
        return SUCCESS;
    }

}

三、总结

通过上面的例子我们应该知道,对于同一组(比如操作用户)增删改查的操作,我们可以统一它们的URI,可能这些URI 是相同的,但是却代表着不同的资源,通过对应的请求方式从而执行增删改查操作。使用RESTful 风格的架构,可以使设计的软件更简洁,更有层次,更易于实现缓存机制等。