RESTful 一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
下面来看一组 传统API 和 RESTful API 写法的对比:
方式 | 传统API请求方法 | 传统API写法 | RESTful API请求方法 | RESTful API写法 |
---|---|---|---|---|
查询 | GET | /user/query?name=tom | GET | /user?name=tom |
详情 | GET | /user/getInfo?id=1 | GET | /user/{id} |
创建 | POST | /user/create?name=tom | POST | /user |
修改 | POST | /user/update?id=1&name=joy | PUT | /user/{id} |
删除 | GET | /user/delete?id=1 | DELETE | /user/{id} |
开发 RESTful API 常用的 Spring MVC 注解:
Spring MVC常用的注解 | 说明 |
---|---|
@RestController | Spring4之后新加的注解,等同于@ResponseBody+@Controller,标明此Controller提供RESTful API |
@GetMapping | 组合注解,等同于@RequestMapping(method = RequestMethod.GET),同理还有@PostMapping、@PutMapping、@DeleteMapping |
@RequestParam | 映射请求参数到java方法的参数,属性required:是否必传 |
@PageableDefault | 指定分页参数默认值 |
@RequestBody | 映射请求体到java方法的参数 |
@Valid 和 @BindingResult | 验证请求参数的合法性并处理校验结果 |
基于Restful设计的增删改查
基于之前的springboot web开发集成mybatis程序,
http://blog.csdn.net/qq_22860341/article/details/79214442
实体类,以及数据库字段:
package com.example.demo.model;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private Integer userid;
private String account;
private String password;
private String name;
private String sex;
private String parent;
private String phone;
private Date createtime;
private Integer usertype;
private String classes;
private String address;
//此处省略get和set方法。
}
1,新增:
springMVC:
@RestController
public class RESTfulController {
@Autowired
private UserService userService;
/**
* 新增
* @param user
* @return
*/
@PostMapping(value = "/user")
public String createUser(@RequestBody User user){
int num = userService.insert(user);
if(num==0){
return "error";
}
return "success";
}
}
测试请求
1,可以使用火狐的RESTful模拟测试
2 使用google的POSTman
这里使用火狐RESTful,下载一个插件即可。
模拟新增请求:
数据库:
2,查询
mvc
/**
* 修改
* 以修改名字name为例
* @return
*/
@PutMapping("/user/{id}")
public String updateUser(@PathVariable Integer id,@RequestBody User user){
User users = userService.selectByPrimaryKey(id);
users.setName(user.getName());
int num = userService.updateByPrimaryKey(users);
if(num==0){
return "error";
}
return "success";
}
测试请求:
修改:
/**
* 修改
* 以修改名字name为例
* @return
*/
@PutMapping("/user/{id}")
public String updateUser(@PathVariable Integer id,@RequestParam String name){
User user = userService.selectByPrimaryKey(id);
user.setName(name);
int num = userService.updateByPrimaryKey(user);
if(num==0){
return "error";
}
return "success";
}
测试
删除
/**
* 删除
*/
@DeleteMapping("/user/{id}")
public String deleteUser(@PathVariable Integer id){
int num = userService.deleteByPrimaryKey(id);
if(num==0){
return "error";
}
return "success";
}
测试: