SpringMVC-06-Restful风格

SpringMVC-06-Restful风格

1. 概念

  • Restful就是一个资源定位及资源操作的风格
  • 不是标准也不是协议,只是一种风格。
  • 基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
  • 本质:通过一个url 拿到一个 JSON格式的字符串
    • 作用:更安全,你就算看到我url ,你也不知道我要干什么

2. @RequestMapping 实现Restful

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

2.1. 传统方式 操作资源

通过不同的参数来实现不同的效果!方法单一,post 和 get

2.2 使用RESTful 操作资源

可以通过不同的请求方式来实现不同的效果!如下:请求地址一样,但是功能可以不同!

学习测试

  1. 在新建一个类RestFulController
1
2
3
@Controller
public class RestFulController {
}
  1. Spring MVC中可以使用 @PathVariable注解,让方法参数的值对应绑定到一个URL模板变量上。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Controller
public class RestFulController {

//映射访问路径
// {p1}/{p2}占位符
@RequestMapping("/commit/{p1}/{p2}")
public String index(@PathVariable int p1, @PathVariable int p2, Model model){
// @PathVaribale :这里把参数{p1}赋值给了p1,{p2}赋值给了p2
int result = p1+p2;
//Spring MVC会自动实例化一个Model对象用于向视图中传值
model.addAttribute("msg", "结果:"+result);
//返回视图位置
return "test";
}

}
  1. 测试请求查看下

思考:使用路径变量的好处?

  • 使得路径变得更加简洁
  • 获得参数更加方便,框架会自动进行类型转换
  • 通过路径变量可以约束访问参数,如果类型不一样,则访问不到对应的请求方法,如这里访问是的路径是/commit/1/a,则路径与方法不匹配,而不会是参数转换失败。
  • 参数会安全,不暴露自己的参数名字

  1. 我们来修改下对应的参数类型,再次测试
1
2
3
4
5
6
7
8
9
10
11
//映射访问路径
@RequestMapping("/commit/{p1}/{p2}")
public String index(@PathVariable int p1, @PathVariable String p2, Model model){

String result = p1+p2;
//Spring MVC会自动实例化一个Model对象用于向视图中传值
model.addAttribute("msg", "结果:"+result);
//返回视图位置
return "test";

}

2.2.1 method属性 指定请求类型

  • 用于约束请求的类型,可以收窄请求范围。指定请求谓词的类型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE

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

  • 所有的地址栏请求默认都会是 HTTP GET 类型的。

1
2
3
4
5
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
  • @GetMapping是一个组合注解
    • 它所扮演的是 @RequestMapping(method =RequestMethod.GET)的一个快捷方式。
    • 平时使用的会比较多!
1
2
3
4
5
6
7
8
9
@Controller
public class RestfulController {
@RequestMapping(value = "/commit/{p1}/{p2}",method = RequestMethod.GET)
public String index(@PathVariable int p1 , @PathVariable int p2, Model model){
int result = p1+p2;
model.addAttribute("msg","结果"+result);
return "test";
}
}

小结:

  • Url就知道要什么
  • http method就知道干什么
  • http status code就知道结果如何

参考博客:

3. 小黄鸭调试法

场景一:我们都有过向别人(甚至可能向完全不会编程的人)提问及解释编程问题的经历,但是很多时候就在我们解释的过程中自己却想到了问题的解决方案,然后对方却一脸茫然。

场景二:你的同行跑来问你一个问题,但是当他自己把问题说完,或说到一半的时候就想出答案走了,留下一脸茫然的你。

其实上面两种场景现象就是所谓的小黄鸭调试法(Rubber Duck Debuging),又称橡皮鸭调试法,它是我们软件工程中最常使用调试方法之一。

此概念据说来自《程序员修炼之道》书中的一个故事,传说程序大师随身携带一只小黄鸭,在调试代码的时候会在桌上放上这只小黄鸭,然后详细地向鸭子解释每行代码,然后很快就将问题定位修复了。

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2019-2022 Zhuuu
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信