目录
一、Restful风格的请求
二、Apifox软件
三、定义响应数据统一格式的java实体类:
四、后端接收路径指定请求方式:
五、从请求中接收简单参数@RequestParam
六、请求体中接收参数@RequestBody
七、请求路径中接收简单参数@PathVariable
八、公共路径抽取 @RequestMapping("共有路径")
九、实体类和数据库字段的封装映射
一、Restful风格的请求
根据请求方式描述操作:更加的规范,统一,容易维护
Restful风格URL | 请求方式 | 含义 |
http://localhost:8080/user/1 | GET | 查询ID为1的用户 |
http://localhost:8080/user/1 | DELETE | 删除ID为1的用户 |
http://localhost:8080/user | POST | 新增用户 |
http://localhost:8080/user | PUT | 修改用户 |
二、Apifox软件
Restful风格的请求,浏览器地址栏只支持发出 GET 请求。
其他请求方式就要借助第三方软件"Apifox"软件模拟前端向后端发送的不同方式的请求。
1、新建HTTP接口
2、选择请求方式和请求地址,点击发送即可模拟前端发送的请求。
三、定义响应数据统一格式的java实体类:
实体类Result:
包含成员:
1、Integer code:响应代码:1成功,0失败
2、String msg:返回信息
3、Object data:响应的数据
包含静态成员方法:
1、Result success():操作成功响应,无数据
2、Result success(Object object):操作成功响应(带数据),传入数据data属性中。
3、Result error(String msg):操作失败响应,传入错误信息。
四、后端接收路径指定请求方式:
1、不限定请求方式:@RequestMapping
@RequestMapping("/users") ***此注释表示不限定请求方式*** public Result list(){ System.out.println("查询全部用户数据"); List<user> userList = userService.findAll(); return Result.success(userList); }2、限定请求方式
GET:
方式1:@RequestMapping(value = "/users",method = RequestMethod.GET)
方式2:@GetMapping("/users") --------SpringBoot提供的注解(推荐,简洁)
POST:
@PostMapping("users")
DELETE:
@DeleteMapping("/user/1")
PUT:
@PutMapping("/user")
五、从请求中接收简单参数@RequestParam
场景:删除id为5的用户数据
请求方式:DELETE
url:/users?id=5
方式一(原始,繁琐):基于HttpServletRequest 获取请求参数
@DeleteMapping("/users") public Result deleteById(HttpServletRequest request) { String idStr = request.getParameter("id"); //通过对象中获取键为id的值,获取到字符串类型id。 int id = Integer.parseInt(idStr); //字符串转化为int类型,方便后续操作 后续操作略---- return Result.success(); //删除不需带数据返回。 }方式二(推荐):Spring提供的@RequestParam("")注解
@DeleteMapping("/users") public Result deleteById(@RequestParam("id") Integer userId) { 操作略---- return Result.success(); //删除不需带数据返回。 }注意:一旦声明了@RequestParam注解,该参数在请求时必须传递,如果不传递将会报错。
解决此问题要修改该注解内参数,修改过后,不传参数id将会是null:
public Result deleteById(@RequestParam(value = "id",required = false) Integer userId)方式三(推荐):如果请求参数名与形参变量名相同,直接定义方法形参即可接收(省略@RequestParam注解)
@DeleteMapping("/users") public Result deleteById(Integer id) { 操作略---- return Result.success(); //删除不需带数据返回。 }六、请求体中接收参数@RequestBody
场景:接收JSON格式的请求参数用于新增用户
请求方式:POST
url:/users
前提:JSON数据的键名与方法形参对象的属性名相同,并需要使用@RequestBody注解标识
请求体JSON:
{ "name": "张三", "age": "19" }实体类:
@Data //lombok提供get set方法 @AllArgsConstructor //lombok提供全参构造 @NoArgsConstructor //lombok提供无参构造 public class User { private String name; private Integer age; }请求处理类@Requestbody使用:
@PostMapping("/users") public Result add(@RequestBody User user) { userService.add(user); //service层传入对象进行添加。 return Result.success(); }七、请求路径中接收简单参数@PathVariable
场景:根据前端请求携带的路径参数ID查询回显
请求方式:GET
url:/users/1
请求处理类: @PathVariable注解,获取路径中id的值,赋值给形参userId:
@GetMapping("/users/{id}") public Result getInfo(@PathVariable("id") Integer userId) { User user = userService.getInfo(userId); return Result.success(user); }如果形参的名字跟请求路径参数的名字一致,就可以省略@PathVariable注解的值:
@GetMapping("/users/{id}") public Result getInfo(@PathVariable Integer id) { User user = userService.getInfo(id); return Result.success(user); }多个路径参数:
@GetMapping("/users/{id}/{name}") public Result getInfo(@PathVariable Integer id,@PathVariable String name) { User user = userService.getInfo(id); return Result.success(user); }八、公共路径抽取 @RequestMapping("共有路径")
场景:多个接收类都包含同样的路径/users,就可以抽取公共路径
1、GetMapping("/users"):获取全部成员信息。走URL
2、GetMapping("/users/{id}"):获取指定id的成员信息。走URL
3、DeleteMapping("/users"):删除成员信息。走URL
4、PostMapping("/users"):新增成员信息。走请求体
5、PutMapping("/users"):修改成员信息。走请求体
请求处理类上添加@RequestMapping注解:
@RequestMapping("/users") //抽取公共路径/users @RestController public class UserController{ @GetMapping //省略路径 public Result findAll() { 获取成员列表 } @PutMapping //省略路径 public Result updateById(@RequestBody User user) { 修改成员信息 } @GetMapping("/{id}") //省略公共路径,包含独有路径 public Result GetInfo(@PathVariable Integer id) { 根据路径参数查询回显成员信息 } }九、实体类和数据库字段的封装映射
1、自动映射前提:
实体类属性名和数据库表的字段名一致,MyBatis会自动封装。
2、如果字段名与实体类属性名不一致,以下是解决方案:
数据库字段:create_time、update_time。
实体类成员:createTime、updateTime。
方式一:Mapper层中,使用@Results和@Result注解进行手动映射
@Results({ @Result(column = "create_time",property = "createTime"), @Result(column = "update_time",property = "updateTime") }) @Select("select * from users") //查询users表中所有字段。 public List<User> findAll(); //返回给一个List集合。方式二:Mapper层sql语句中,给数据库中字段起别名
@Select("select id,name,create_time createTime,update_time updateTime from users") public List<User> findAll();方式三(推荐):如果字段名与属性名符合驼峰命名规则,使用Mybatis开启驼峰命名映射,yml配置文件写入以下
映射要求:xxx_Abc == xxxAbc
mybatis: configuration: map-underscore-to-camel-case: true //此行表示开启驼峰命名映射