RESTful是web应用的一种设计风格、开发方式。
以根据product_id查询产品信息为例。
原来的写法
@org.springframework.stereotype.Controller public class ProductController{ @RequestMapping("/queryProduct") public ModelAndView queryStudent(int product_id) { ModelAndView mav = new ModelAndView("product_info"); //此处省略调用dao层获取产品信息,得到Product类的实例product //将数据传给视图,展示产品信息 mav.addObject("product", product); return mav; } }
请求地址:
http://.../queryProduct?product_id=1
RESTful风格的写法
@org.springframework.stereotype.Controller public class ProductController{ @RequestMapping("/product/{product_id}") public ModelAndView queryStudent(@PathVariable int product_id) { ModelAndView mav = new ModelAndView("product_info"); //此处省略调用dao层获取产品信息,得到Product类的实例product //将数据传给视图,展示产品信息 mav.addObject("product", product); return mav; } }
请求地址:
http://.../product/1
原来是映射为queryProduct、saveUser,动词+名词;
RESTful风格是映射为product、user,名词。
原来使用 ?参数名=参数值 来传参数,
RESTful是直接把参数值写成下一级路径的形式 , /1。
@RequestMapping("/product/{product_id}") public ModelAndView queryStudent(@PathVariable int product_id) { }
在@RequestMapping中,用{ }来接收对应位置上的值,{ }中随便写一个变量名,用这个变量来接收值。注意是{ },不是#{ },也不是${ }。
映射地址时会自动把{ }部分换为相应的值。
并且,SpringMVC会把{ }的值赋给业务方法中@PathVariable修饰的参数。
怎么赋值?
@RequestMapping("/product/{product_type}/{product_id}") public ModelAndView queryProduct(@PathVariable String type,@PathVariable("product_id") int product_id) { }
如果业务方法的参数名和{ }中的变量名相同,直接用@PathVariable修饰参数即可,SpringMVC会自动把值赋给同名的参数。
如果不相同,需要用@PathVariable(" ")指定这个参数要使用哪个{ }的值。参数通过@PathVariable(" ")与某个{ }绑定。
这种写法还是比较常见的,比如把产品类型、产品id传过去:
http://.../product/phone/5 http://.../product/computer/9
手机这个大类的第五款产品,电脑这个大类的第9款产品。
再比如把搜索的关键字传过去:
http://.../search/chy
比如说查看某用户、的某类型、的第几篇文章,把用户id、类型、文章id传过去,请求参数甚至可以用来拼接视图名:
https://www.cnblogs.com/chy18883701161/p/12249175.html
映射的url地址随着请求参数的变化而变化,带{ }的这个@RequestMapping映射地址只是一个模板,所以又叫做url模板映射。
http://.../user/1
addUser、deleteUser、updateUser、queryUser,业务方法众多,总不能都映射为/user吧。
@RequestMapping(value = "/user/{user_id}",method = RequestMethod.GET) public ModelAndView queryProduct(@PathVariable int user_id) { }
不是可以指定HTTP请求方式吗,4个方法都映射为/user,以HTTP请求方式来区分CRUD:
- get 查询
- put 添加
- delete 删除
- post 更新
使用ajax发请求时,根据操作类型使用对应的HTTP请求方式。
这种方式不常用,因为国内基本只用get、post。
可以使用@RequestMapping(),在里面指定HTTP请求方式,也可以直接使用对应的注解:
@RequestMapping(value = "/user/{user_id}",method = RequestMethod.GET) @GetMapping("/user/{user_id}")
完全等价。
4种HTTP请求都有对应的注解。
来源:https://www.cnblogs.com/chy18883701161/p/12250771.html