什么是Restful风格

1 Restful风格

1.1 什么是 Restful

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

功能

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

对比之前的传递参数方式:

  • http://localhost:8080/hello?name=Tom&age=20

使用Restful风格的方式:

  • http://localhost:8080/hello/Tom/20

简言之,就是不使用问号传参了

1.2 传递参数

要想使用 Restful 风格传递参数,在 SpringMVC 中要使用 @PathVariable 注解

如果 @RequestMapping 中没有定义类似 “/{sex}” 这种变量,则在方法参数列表中使用 @PathVariable 会报错

@Controller
public class HelloController {
    @RequestMapping("/hello/{name}/{age}")
    public String hello(@PathVariable String name, @PathVariable String age, Model model){
        // 向模型中添加属性msg与值,可以在jsp页面中取出
        model.addAttribute("msg", name + age);
        return "Welcome";
    }
}

当我们再次输入请求 hello/Tom/20 时,后端就会解析参数,将 {name} 中的属性与控制器中方法参数对应上,{age} 同理
在这里插入图片描述
当然这里我们不能使用表单测试,普通的 html 不能达到拼接的功能,无法将前端提交的请求变为 / 样式

1.3 请求方式

  • 上面说过资源操作有四种:POST(添加)、DELETE(删除)、PUT(修改)、GET(查询)

  • 我们可以指定控制器接受哪种请求,在 @RequestMapping 注解中添加 method 属性,用于指定处理何种请求

// 只处理 POST 请求
@RequestMapping(value = "/hello", method = RequestMethod.POST)
public String helloPost(String name, String age, Model model){
    model.addAttribute("msg", "POST: " + name + age);
    return "Welcome";
}

// 只处理 GET 请求
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String helloGet(String name, String age, Model model){
    model.addAttribute("msg", "GET: " + name + age);
    return "Welcome";
}
  • 创建两个表单,模拟两种请求(post 和 get)
<form action="hello" method="post">
  <input type="text" name="name">
  <input type="text" name="age">
  <input type="submit">
</form>
<form action="hello" method="get">
  <input type="text" name="name">
  <input type="text" name="age">
  <input type="submit">
</form>
  • 这里我们可以使用两个 hello 请求,因为两个处理器处理的请求方式不同,因此不会出现 ambiguous

  • 如果直接在地址栏输入请求,那无法指定请求方式,只能是默认 GET 方式,这里没有配置 Restful 传递参数,所以还是使用问号

在这里插入图片描述

  • 测试表单提交

在这里插入图片描述
提交上面表单的结果:
在这里插入图片描述
提交下面表单的结果:
在这里插入图片描述

  • 这里可以看见 GET 方式默认还是使用问号传参的,但 POST 并不会显示

  • 当然也可以不使用 method 的方式来实现

  • 使用 @GetMapping() 与 @PostMapping 注解来实现,代替之前的 @RequestMapping

// 只处理 POST 请求
@PostMapping("/hello")
public String helloPost(String name, String age, Model model){
    model.addAttribute("msg", "POST: " + name + age);
    return "Welcome";
}

// 只处理 GET 请求
@GetMapping("/hello")
public String helloGet(String name, String age, Model model){
    model.addAttribute("msg", "GET: " + name + age);
    return "Welcome";
}
  • 这样是不是既简洁又轻巧
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sadness°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值