服务器代码
创建SpringBoot项目
Maven依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
application.yml
server:
port: 80
servlet:
context-path: /demo
返回统一格式数据相关
ResultCode.java
public enum ResultCode {
/* 成功状态码 */
SUCCESS(200, "操作成功"),
/**
* 客户端错误
*/
CLIENT_FAIL(400, "客户端错误"),
/**
* 服务器端错误
*/
SERVER_FAIL(500, "服务器端错误")
;
/**
* 操作代码
*/
int code;
/**
* 提示信息
*/
String msg;
ResultCode(int code, String msg) {
this.code = code;
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
Result.java
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {
/**
* 请求响应状态码(200、400、500)
*/
private int code;
/**
* 请求结果描述信息
*/
private String msg;
/**
* 请求结果数据
*/
private T data;
private Result(ResultCode resultCode) {
if (resultCode == null) {
return;
}
this.code = resultCode.code();
this.msg = resultCode.msg();
}
private Result(ResultCode resultCode, T data) {
this(resultCode);
this.data = data;
}
/**
* 操作成功
*
* @return
*/
public static <T> Result<T> success() {
Result result = new Result(ResultCode.SUCCESS);
return result;
}
/**
* 操作成功
*
* @param data
* @return
*/
public static <T> Result<T> success(T data) {
Result result = success();
result.setData(data);
return result;
}
/**
* 操作成功
*
* @param resultCode
* @param data
* @return
*/
public static <T> Result<T> success(ResultCode resultCode, T data) {
Result result = new Result(resultCode, data);
return result;
}
/**
* 操作失败
*
* @param resultCode
* @return
*/
public static <T> Result<T> fail(ResultCode resultCode) {
Result result = new Result(resultCode);
return result;
}
/**
* 操作失败
*
* @param resultCode
* @param data
* @return
*/
public static <T> Result<T> fail(ResultCode resultCode, T data) {
Result result = new Result(resultCode, data);
return result;
}
}
实体类
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
public class Dept {
private Integer deptno;
private String dname;
private String loc;
}
数据库模拟类
public class DeptTable {
private static ArrayList<Dept> depts = new ArrayList<>();
static {
depts.add(new Dept(10, "ACCOUNTING", "CHICAGO"));
depts.add(new Dept(20, "RESEARCH", "DALLAS"));
depts.add(new Dept(30, "SALES", "CHICAGO"));
depts.add(new Dept(40, "OPERATIONS", "BOSTON"));
}
public static boolean insert(Dept dept) {
boolean res = depts.add(dept);
return res;
}
public static boolean update(Dept dept) {
Integer deptno = dept.getDeptno();
boolean flag = false;
for (int i = 0; i < depts.size(); i++) {
Dept temp = depts.get(i);
if (temp.getDeptno().equals(deptno)) {
depts.set(i, dept);
flag = true;
}
}
return flag;
}
public static boolean delete(Integer deptno) {
boolean flag = false;
for (int i = 0; i < depts.size(); i++) {
Dept dept = depts.get(i);
if (dept.getDeptno().equals(deptno)) {
depts.remove(i);
flag = true;
}
}
return flag;
}
public static Dept select(Integer deptno) {
for (int i = 0; i < depts.size(); i++) {
Dept dept = depts.get(i);
if (dept.getDeptno().equals(deptno)) {
return dept;
}
}
return null;
}
public static void output() { //输出所有数据,查看测试结果用
for (Dept dept : depts) {
System.out.println(dept);
}
}
}
Controller
@Slf4j
@RestController
public class DeptController {
//获取Dept,使用GET方法
@GetMapping(value = "/v2/depts/{deptno}")
public Result getDeptByDeptno(@PathVariable("deptno") Integer deptno) {
Dept dept = DeptTable.select(deptno);
if (dept != null) {
return Result.success(dept);
} else {
return Result.success(ResultCode.SERVER_FAIL);
}
}
//获取所有Dept
@GetMapping("/v2/depts")
public Result<List<Dept>> getAllDept() {
List<Dept> depts = DeptTable.selectAll();
return Result.success(depts);
}
//增加Dept ,使用POST方法
@PostMapping(value = "/v1/depts")
public Result saveDept(@RequestBody Dept dept) {
boolean res = DeptTable.insert(dept);
log.info("saveDept:{}", dept);
DeptTable.selectAll().forEach(System.out::println);
if (res) {
return Result.success(dept);
} else {
return Result.fail(ResultCode.SERVER_FAIL);
}
}
//更新Dept,使用PUT方法
@PutMapping(value = "/v1/depts/{deptno}")
public Result updateDept(@PathVariable("deptno")Integer deptno,@RequestBody Dept dept) {
dept.setDeptno(deptno);
boolean flag = DeptTable.update(dept);//表示用户要删除的deptno不存在
log.info("updateDept:{}", dept);
DeptTable.selectAll().forEach(System.out::println);
if (flag) {
return Result.success(dept);
} else {
return Result.fail(ResultCode.SERVER_FAIL);
}
}
//删除Dept,使用DELETE方法
@DeleteMapping(value = "/v1/depts/{deptno}")
public Result deleteDept(@PathVariable Integer deptno) {
boolean flag = DeptTable.delete(deptno);
log.info("deleteDept:{}", deptno);
DeptTable.selectAll().forEach(System.out::println);
if (flag) {
return Result.success(deptno);
} else {
return Result.fail(ResultCode.CLIENT_FAIL);
}
}
}
API说明:
请求方式 | api | 功能 |
---|---|---|
Get | /v2/depts/{deptno} | 获取指定编号的部门 |
Get | /v2/depts | 获取所有的部门 |
post | /v1/depts | 增加部门 |
put | /v1/depts/{deptno} | 修改部门 |
delete | /v1/depts/{deptno} | 删除指定的部门 |
测试部分
启动项目,采用Restful toolkit进行测试
/v2/depts/{deptno}
/v2/depts
/v1/depts
/v1/depts/{deptno}
结果: