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

 

posted on 2018-05-26 10:32  Javanumberone  阅读(220)  评论(0编辑  收藏  举报

导航