RESTful风格及其SpringMVC实现


1、RESTful概念

Restful就是一个资源定位资源操作的风格。

  • 不是标准也不是协议,只是一种风格
  • 基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

2、RESTful功能

  • 资源:互联网所有的事物都可以被抽象为资源
  • 资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。
  • 分别对应 添加删除修改查询

3、对比:传统方式操作资源

通过不同的参数来实现不同的效果!

http://127.0.0.1/user/query?id=1 ;查询用户(GET)

http://127.0.0.1/user/add ;新增用户(POST)

http://127.0.0.1/user/update ;更新用户(POST)

http://127.0.0.1/user/delete?id=1 ;删除用户(GET或POST)

分析:

  • 这种方式请求方式单一,只有 postget 两种请求方式
  • 且不太安全,传入的参数和名称,直接暴露在url中
  • 若想实现不同的业务,每次发起不同的请求,就对应了不同处理代码:
    • 例如要查询用户,则通过GET方式请求/query路径,对应相应的处理代码
    • 例如要新增用户,则通过POST方式请求/add路径,对应相应的处理代码
    • 例如要更新用户,则通过POST方式请求/update路径,对应相应的处理代码
    • 例如要删除用户,则通过POST/GET方式请求/update路径,对应相应的处理代码

4、SpringMVC实现传统方式操作资源

我们在上述实验环境用注解开发SpringMVC详细配置中进行测试

HelloController.java 中添加一个add方法

目的:传入两个参数,在页面上显示两数的和

@RequestMapping("/add")
public String add(int a, int b, Model model) {
    int result = a + b;
    model.addAttribute("msg", "结果为" + result);
    return "hello";
}

我们测试运行:通过传统的方式操作资源,访问http://localhost:8080/add?a=1&b=2

image-20200828230934435

成功显示结果,如果我们想通过RestFul方式实现呢?


5、使用RestFul操作资源

可以通过不同的请求方式来实现不同的效果!

  • GET:用于查询资源

  • POST:用于创建资源

  • PUT:用于更新服务端的资源的全部信息

  • PATCH:用于更新服务端的资源的部分信息

  • DELETE:用于删除服务端的资源。

如下:请求地址一样,但是功能可以不同!

http://127.0.0.1/user/1 ;查询用户(GET)

http://127.0.0.1/user ;新增用户(POST)

http://127.0.0.1/user ;更新用户(PUT)

http://127.0.0.1/user/1 ;删除用户(DELETE)

分析:

  • RESTful风格很简单,想要实现不同的功能,直接设置不同的请求方式

    • 例如要查询用户,就使用GET请求
    • 例如要新增用户,就使用POST请求
    • 例如要更新用户,就使用PUT请求
    • 例如要删除用户,就使用DELETE请求
  • RESTful相比传统方式更加安全,没有暴露处传入参数的名称


6、SpringMVC实现RESTful操作资源

接下来我们使用RestFul风格操作资源做相应的测试,同样求两个数的加和显示

  1. 在传入前端的每个参数前面增加@PathVaribale注解
  2. @RequestMapping注解中加上取参数符号
@RequestMapping("/add/{a}/{b}")
public String add(@PathVariable int a, @PathVariable int b, Model model) {
    int result = a + b;
    model.addAttribute("msg", "结果为" + result);
    return "hello";
}

重新启动Tomcat运行测试,访问http://localhost:8080/add/1/2

image-20200828231450641

成功显示,这就是通过RestFul风格操作资源,传入的1对应了a的值,传入的2对应了b的值

我们知道,所有地址栏请求默认都会是 HTTP GET 类型的,那如果我们想使用其他的请求方式呢?

其中RequestMethod是一个枚举类,其中内置了很多请求的类型
image-20200828232649918
image-20200828232625548

我们修改以下代码,在@RequestMapping注解中设置method属性为指定的请求类型,这里设置为DELETE

@RequestMapping(value = "/add/{a}/{b}", method = RequestMethod.DELETE)
public String add(@PathVariable int a, @PathVariable int b, Model model) {
    int result = a + b;
    model.addAttribute("msg", "结果为" + result);
    return "hello";
}

再次重启Tomcat运行测试,同样请求http://localhost:8080/add/1/2
image-20200828232950784
发现报错,这是因为这个请求应该是以GET方式进行请求的,而我们设置成DELETE方式

此时,设置method请求类型为GET,再次重启Tomcat运行测试,即可正确显示

@RequestMapping(value = "/add/{a}/{b}", method = RequestMethod.GET)
public String add(@PathVariable int a, @PathVariable int b, Model model) {
    int result = a + b;
    model.addAttribute("msg", "结果为" + result);
    return "hello";
}
image-20200828233145765

同样,我们可以设置多个方法,在@RequestMapping中设置value访问路径为同一个路径,但是设置请求方式为不同的请求方式,这就上述请求地址一样,但是功能不同的实现;


7、总结

Spring MVC 的 @RequestMapping 注解能够处理 HTTP 请求的方法, 比如 GET, PUT, POST, DELETE 以及 PATCH。

还有一些组合注解,是方法级别的注解变体:

@GetMapping //使用Get方式请求
@PostMapping //使用Post方式请求
@PutMapping //使用Put方式请求
@DeleteMapping //使用Delete方式请求
@PatchMapping //使用Patch方式请求

如:以下代码就设置了通过GET方式进行请求,就不用通过@RequestMapping的method属性设置了

  • 等价于是 @RequestMapping(method =RequestMethod.GET) 的一个快捷方式。
@GetMapping("/hello")
public String hello2(Model model) {
    model.addAttribute("msg", "This is the second request");
    return "hello";
}

猜你喜欢

转载自blog.csdn.net/qq_45173404/article/details/108293037