SpringMVC RESTful
2020-02-02 16:01:50来源:博客园 阅读 ()
SpringMVC RESTful
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模板映射。
表单的action、<a>链接的href、转发和重定向、业务方法中返回的视图名,都可以使用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
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- 蚂蚁金服这套SpringMvc面试题你懂多少(面试必刷) 2020-05-27
- SpringMVC高级-拦截器如何正确运用?案例详解 2020-05-21
- 萌新学习SpringMVC 2020-05-20
- SpringMVC中如何获取请求参数?案例详解 2020-05-19
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash