SpringMVC之REST

简介: 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值是一样的:


相关文章
|
SQL Cloud Native 架构师
深入浅出Presto:大数据查询引擎的原理与应用
【4月更文挑战第7天】Presto是高性能的分布式SQL查询引擎,专为大规模数据交互式分析设计。它采用分离式架构,内存计算和动态规划优化查询,支持跨源查询、交互式查询和ANSI SQL兼容性。应用于大数据分析、实时数据湖查询和云原生部署。Presto的灵活性和效率使其在大数据处理领域备受推崇,适合分析师、数据科学家和IT架构师使用。未来将在博客中分享更多实践和案例。
1524 1
|
关系型数据库 MySQL 数据库
【MySQL】MySQL事务保姆级教程(适合MySQL初学者学习)
【MySQL】MySQL事务保姆级教程(适合MySQL初学者学习)
895 0
Solr-Exception
Solr-Exception
166 0
|
程序员 Java 开发者
程序员必下20本电子书:Java手册、Flutter最佳实践、AIoT开发手册... | 1024程序员节技术礼包之二
1024程序员节,开发者社区决定动用洪荒之力为你集齐整整 20本技术电子书 !!一次性打包送给你!
90317 0
|
4天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
14天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
8天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
565 210