一篇文章带你掌握主流服务层框架——SpringMVC( 九 )


我们下面将逐步进行RESTful的修改:

  1. 设置http请求动作
package com.itheima.controller;import com.itheima.domain.Book;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.*;@Controllerpublic class BookController {// RequestMapping中包含value和method两种属性// value:访问路径// method:访问方法@RequestMapping(value = "https://www.huyubaike.com/users",method = Request.POST)@RequestBody public String save(@RequestBody User user){System.out.println("user save" + user);return "{'module':'user save'}"}}/*名称:@RequestMapping类型:方法注解位置:SpringMVC控制器方法定义上方作用:设置当前控制器方法请求访问路径属性:value访问路径,method请求动作*/
  1. 设置请求参数(路径变量)
package com.itheima.controller;import com.itheima.domain.Book;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.*;@Controllerpublic class BookController {// 首先针对我们所需参数给出@PathVariable注解,并在访问路径中采用{}占位表示所传数据// 简单来说就是,系统根据请求路径,得到所需数据,再带入到方法中@RequestMapping(value = "https://www.huyubaike.com/users/{id}" ,method = RequestMethod.DELETE)@RequestBodypublic String delete(@PathVariable Integer id){System.out.println("book delete..." + id);return "{'module':'book delete'}";}}/*名称:@PathVariable类型:形参注解位置:SpringMVC控制器方法形参定义前面作用:绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应*/下面我们给出所有情况案例:
package com.itheima.controller;import com.itheima.domain.User;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.*;@Controllerpublic class UserController {//设置当前请求方法为POST,表示REST风格中的添加操作@RequestMapping(value = "https://www.huyubaike.com/users",method = RequestMethod.POST)@ResponseBodypublic String save(){System.out.println("user save...");return "{'module':'user save'}";}//设置当前请求方法为DELETE , 表示REST风格中的删除操作//@PathVariable注解用于设置路径变量(路径参数),要求路径上设置对应的占位符,并且占位符名称与方法形参名称相同@RequestMapping(value = "https://www.huyubaike.com/users/{id}",method = RequestMethod.DELETE)@ResponseBodypublic String delete(@PathVariable Integer id){System.out.println("user delete..." + id);return "{'module':'user delete'}";}//设置当前请求方法为PUT,表示REST风格中的修改操作@RequestMapping(value = "https://www.huyubaike.com/users",method = RequestMethod.PUT)@ResponseBodypublic String update(@RequestBody User user){System.out.println("user update..."+user);return "{'module':'user update'}";}//设置当前请求方法为GET,表示REST风格中的查询操作//@PathVariable注解用于设置路径变量(路径参数),要求路径上设置对应的占位符 , 并且占位符名称与方法形参名称相同@RequestMapping(value = "https://www.huyubaike.com/users/{id}" ,method = RequestMethod.GET)@ResponseBodypublic String getById(@PathVariable Integer id){System.out.println("user getById..."+id);return "{'module':'user getById'}";}//设置当前请求方法为GET,表示REST风格中的查询操作@RequestMapping(value = "https://www.huyubaike.com/users",method = RequestMethod.GET)@ResponseBodypublic String getAll(){System.out.println("user getAll...");return "{'module':'user getAll'}";}}/* 下述为原有代码:@RequestMapping@ResponseBodypublic String delete(){System.out.println("user delete...");return "{'module':'user delete'}";}@RequestMapping@ResponseBodypublic String update(){System.out.println("user update...");return "{'module':'user update'}";}@RequestMapping@ResponseBodypublic String getById(){System.out.println("user getById...");return "{'module':'user getById'}";}@RequestMapping@ResponseBodypublic String getAll(){System.out.println("user getAll...");return "{'module':'user getAll'}";}*/
我们在这里给出@RequestBody,@RequestParam , @PathVariable区别
区别:
  • @RequestParam用于接收url地址传参或表单传参
  • @RequestBody用于接收json数据
  • @PathVariable用于接收路径参数,使用{参数名称}描述路径参数
应用:
  • 后期开发中,发送请求参数超过1个时,以json格式为主,@RequestBody应用较广
  • 如果发送非json格式数据,选用@RequestParam接受请求参数
  • 采用RESTful进行开发,当参数数量较少时,如1个 , 可以采用@PathVariable接收请求路径变量,常用来传递id值
REST快速开发我们在上一小节中会发现有许多重复性的代码:
// 每次都填写value,method导致代码繁冗// 包括每次填写ResponseBody使代码繁冗@RequestMapping(value = "https://www.huyubaike.com/users",method = RequestMethod.GET)@ResponseBody

推荐阅读