4.SpringMVC-RestFul API

本文最后更新于2024.04.28-06:31,某些文章具有时效性,若有错误或已失效,请在下方留言或联系涛哥

概念

客户端映射到服务器资源的一种架构设计

万维网 http协议 http://www.tulingxueyuan.cn

Restful 表述性状态传递,简单来说 就是一种更简洁的URL风格,通过URL中的名词确定要什么(操作哪些表),通过请求的Method 确定做什么。

REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

一种相较与之前URL所产生一种更优雅的URL风格

URL CRUD

传统架构风格,需要发送四个请求,分别是?

按照此方式发送请求的时候比较麻烦,需要定义多种请求,而在HTTP协议中,有不同的发送请求的方式,分别是GET、POST、PUT、DELETE等,我们如果能让不同的请求方式表示不同的请求类型就可以简化我们的查询,改成名词:

面向资源

看URL就知道要什么, 看http method就知道干什么

HTTP请求的方式包括四种,通常用于以下功能

  • get请求:用于 查询
  • post请求:用于 做添加
  • put请求:用于 修改
  • delete请求:用于删除。

HTTP协议支持上述的四种请求方式,

1.HTML语言本身不支持 DELETE 和 PUT请求,既在form中 method="delete(put)"无效

2.Js的AJAX是支持 PUT 和 DELETE请求的

1.GET请求

表单中 请求方式method 使用 GET,Controller中的方法上 使用

RequestMapping("...",method ="RequestMethod.GET")

或者 GetMapping("...") 注解

@RequestMapping("/hello",method ="RequestMethod.GET)
    public String hello(Model model){
    model.addAttribute("msg","hello,SpringMVC");
    return "hello";
}

2.POST请求

表单中 method使用 POST,Controller中

可以使用 RequestMapping("...",method ="RequestMethod.POST")

或者PostMapping("...") 注解

@RequestMapping("/hello",method ="RequestMethod.POST)
    public String hello(Model model){
    model.addAttribute("msg","hello,SpringMVC");
    return "hello";
}

3.Put请求

由于HTML本身并不支持 PUT请求

所以 表单中 请求方式 设置为 post

1 在表单中 添加隐藏域 <input type="hidden" name="_method" value="PUT" />

2 在web.xml中 配置 springmvc提供的 额外请求方式的过滤器 HiddenHttpMethodFilter 

<filter>
 <filter‐name>hiddenFilter</filter‐name>
 <filter‐class>org.springframework.web.filter.HiddenHttpMethodFilter</filter‐class>
</filter>
<filter‐mapping>
 <filter‐name>hiddenFilter</filter‐name>
 <url‐pattern>/*</url‐pattern>
</filter‐mapping>

3

在Controller 中方法上使用 RequestMapping("...",method ="RequestMethod.PUT")

或者 @PutMapping("...") 注解

@RequestMapping("/user/{id}/{username}",method ="RequestMethod.PUT)
public String path01(@PathVariable("id") Integer id,@PathVariable("username") String name){
    System.out.println(id);
    System.out.println(name);
    return "/index.jsp";
}

ps:由于tomcat 7以后的版本,对jsp页面跳转方式 更为严格,所以当跳转页面是一个jsp页面时,不能使用put

处理方式:

1.把页面的跳转方式 修改为重定向

2.在jsp的 page指令中 加入 isErrorPage="true"

3.换成tomcat 7

4. 自定义一个过滤器,将request.method改回POST

4.Delete请求:

同上 把隐藏域的value 改成Delete <input type="hidden" name="_method" value="Delete " />

注解使用 RequestMapping("...",method ="RequestMethod.PUT")

或者 @DeleteMapping("...") 注解

@RequestMapping("/user/{id}",method ="RequestMethod.DELETE)
public String path01(@PathVariable("id") Integer id){
    System.out.println(id);
    return "/index.jsp";
}
阅读剩余
THE END