zoukankan      html  css  js  c++  java
  • SpringMVC之REST

    REST

    Representational State Transfer。(源)表现层态转化。是目前
    最流行的一件架。它结构清晰、符合准、易于理解、展方便,
    所以正得到越来越多网站的采用

    • 资源(Resources:网上的一个体,或者是网上的一个具体信息。它
    可以是一段文本、一张图片、一首歌曲、一之就是一个具体的存在。
    可以用一个URI源定位符)指向它,种资对应一个特定的 URI 。要
    源,访问它的URI就可以,因此 URI 一个源的独一无二的

    现层Representation源具体呈出来的形式,叫做它的表现层
    Representation)。比如,文本可以用 txt 格式表,也可以用 HTML
    式、XML 格式、JSON 格式表,甚至可以采用二制格式。
    态转化(State Transfer出一个求,就代表了客端和服器的一
    次交互程。HTTP协议,是一个无状态协议,即所有的状都保存在服
    端。因此,如果客端想要操作服器,必手段,器端
    态转State Transfer)。而这种转化是建立在表现层之上的,所以就是
    现层态转。具体,就是 HTTP 协议里面,四个表示操作方式的
    GETPOSTPUTDELETE。它别对应基本操作:GET 用来
    源,POST 用来新建源,PUT 用来更新源,DELETE 用来源。

    REST风格示例

    – /order/1 HTTP GET :得到 id = 1 的 order   
    – /order/1 HTTP DELETE:删除 id = 1的 order   
    – /order/1 HTTP PUT:更新id = 1的 order   
    – /order HTTP POST:新增 order

    HiddenHttpMethodFilter浏览form 只支持 GET
    POST 求,而DELETEPUT method 并不支
    持,Spring3.0 添加了一个过滤器,可以将转换
    为标准的 http 方法,使得支持 GETPOSTPUT
    DELETE 求。

    示例:

    /**
    * Rest风格的URL
    * 以CRUD为例
    * 新增:/order POST
    * 修改:/order/1 PUT
    * 获取:/order/1 GET
    * 删除:/order/1 DELETE
    * @param id
    * @return
    */

    @RequestMapping(value = "/testRest/{id}",method = RequestMethod.PUT) public String testRestPut(@PathVariable("id") Integer id){ System.out.println("testRest PUT: " + id); return SUCCESS; } @RequestMapping(value = "/testRest/{id}",method = RequestMethod.DELETE) public String testRestDelete(@PathVariable("id") Integer id){ System.out.println("testReset DELETE: " + id); return SUCCESS; } @RequestMapping(value = "/testRest",method = RequestMethod.POST) public String testRestPost(){ System.out.println("testRest POST"); return SUCCESS; } @RequestMapping(value = "/testRest/{id}",method = RequestMethod.GET) public String testRestGet(@PathVariable("id") Integer id){ System.out.println("testRest GET: " + id); return SUCCESS; }

    jsp:

    <form action="test/testRest/1" method="post">
          <input type="hidden" name="_method" value="PUT">
          <input type="submit" value="testRest PUT"/>
      </form>
      <br><br>
      <form action="test/testRest/1" method="post">
          <input type="hidden" name="_method" value="DELETE">
          <input type="submit" value="testRest DELETE"/>
      </form>
      <br><br>
      <form action="test/testRest" method="post">
          <input type="submit" value="testRest POST"/>
      </form>
      <br><br>
      <a href="test/testRest/1">Test Rest GET</a>
      <br><br>

      控制台结果:

     总结:

    如果需要发送DELETE和PUT请求,需要进行如下操作:

    1、需要在web.xml中配置HiddenHttpMethodFilter;
    2、需要发送 POST 请求;
    3、需要在发送POST请求时携带一个name="_method"的隐藏域,值为DELETE或PUT。

    SpringMVC如何在方式中获取URL里面的占位符呢?

    使用@PathVariable注解即可。

    @RequestParame

    @RequestParam:把请求参数传递给请求方法
    value:值即请求参数的参数名称
    required:该参数是否必须,默认true
    defaultValue:参数默认值

    示例:

     @RequestMapping("/testRequestParam")
        public String testRequestParam(@RequestParam(value = "username") String username,
                                       @RequestParam(value = "age", required = false, defaultValue = "0") int age){
            System.out.println("testRequestParam: username= " + username + ",age=" + age);
            return SUCCESS;
        }

    jsp:

    <a href="test/testRequestParam?username=java&age=11">testRequestParam</a>

     @ReuqestHeader

    用法同@RequestParam,用于获取请求头信息传入方法参数。

    示例:

    @RequestMapping("/testRequestHeader")
        public String testRequestHeader(@RequestHeader("User-Agent") String ua){
            System.out.println("testRequestHeader: User-Agent= " + ua);
            return SUCCESS;
        }

    控制台输出

    testRequestHeader: User-Agent= Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36

    @CookieValue

    绑定请求中的Cookie值到方法参数中,用法同@RequestParam

    示例:

    RequestMapping("/testCookieValue")
        public String testCookieValue(@CookieValue(value = "JSESSIONID") String seesionId){
            System.out.println("testCookieValue: seesionId = " + seesionId);
            return SUCCESS;
        }
    
    对应jsp:
    <a href="test/testCookieValue">test testCookieValue</a>

    控制台:

    testCookieValue: seesionId = 660443E054FC195D5DAD798AEF32CBCD

    和开发者工具的cookie值是一样的:

  • 相关阅读:
    NSUserDefaults写作和阅读对象定义自己
    JavaScript三在弹出的对话框中
    mybatis02 架构
    mybatis01
    oracle17 视图
    oracle16 例外
    oracle15 pl/sql 分页
    oracle14 复杂数据类型
    oracle13 触发器 变量
    oracle12 pl/sql
  • 原文地址:https://www.cnblogs.com/stm32stm32/p/9092086.html
Copyright © 2011-2022 走看看