【平台开发】— 7.重构-增加结果统一处理
前面实现了一个简单的登录,接下来开发的是项目管理功能。
但是在写完项目列表接口后,发现了重复代码的情况,这时候就需要重构下代码了。
一、代码冗余
首先看下之前写的UserController
和新写的ProjectController
中的2个方法:
1. UserController
@PostMapping("/login")
public Map<String, Object> login(@RequestBody UserRequest user) throws Exception {
String username = user.getUsername();
String password = user.getPassword();
Map<String, Object> result = new HashMap<>();
Map<String, Object> userToken = new HashMap<>();
Map<String, Object> msg = new HashMap<>();
if (userService.isUserExist(username, password)) {
userToken.put("token","admin-token");
result.put("code", 20000);
result.put("data", userToken);
} else {
msg.put("msg", "用户或密码错误");
result.put("code", 50000);
result.put("data", msg);
}
return result;
}
2. ProjectController
@GetMapping("/getProjectList")
public Map<String, Object> projectList() throws Exception {
List<Project> projectList = projectService.getProjectList();
Map<String, Object> result = new HashMap<>();
result.put("code", 20000);
result.put("data", projectList);
return result;
}
问题就是我在对于返回结果的处理上,每次都要设置code,data这样的值,后面还有其他类似的方法,如果都要写一次那也太不科学了。
二、增加Result类
其实我们做接口测试也都知道,通常接口返回的信息都是这样居多:
{
"code": 20000,
"message": "",
"data": {
"token": "admin-token"
}
}
那我就以这个为目的,去将返回结果抽象出来。
创建一个Result类去统一处理可能出现的一些返回形式,类里提供了多个构造方法,可以根据不同需求进行传参。
package com.mock.platform.common;
public class Result {
private static int SUCCESS_CODE = 20000;
private static int FAIL_CODE = 30000;
private int code;
private String message;
private Object data;
private Result(int code, String message, Object data) {
this.code = code;
this.message = message;
this.data = data;
}
public static Result success() {
return new Result(SUCCESS_CODE,null,null);
}
public static Result success(Object data) {
return new Result(SUCCESS_CODE,"",data);
}
public static Result fail(String message) {
return new Result(FAIL_CODE,message,null);
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
三、重构
那Result
已经准备好了,现在可以重构login
方法了(注释部分是老代码):
// @PostMapping("/login")
// public Map<String, Object> login(@RequestBody UserRequest user) throws Exception {
// String username = user.getUsername();
// String password = user.getPassword();
// Map<String, Object> result = new HashMap<>();
// Map<String, Object> userToken = new HashMap<>();
// Map<String, Object> msg = new HashMap<>();
// if (userService.isUserExist(username, password)) {
// userToken.put("token","admin-token");
// result.put("code", 20000);
// result.put("data", userToken);
// } else {
// msg.put("msg", "用户或密码错误");
// result.put("code", 50000);
// result.put("data", msg);
// }
// return result;
// }
@PostMapping("/login")
public Result login(@RequestBody UserRequest user) throws Exception {
String username = user.getUsername();
String password = user.getPassword();
Map<String, Object> userToken = new HashMap<>();
if (userService.isUserExist(username, password)) {
userToken.put("token","admin-token");
return Result.success(userToken);
} else {
return Result.fail("用户名或密码错误");
}
}
请求下接口,验证一下。
-
用户名密码都正确的情况:
-
密码不对的情况:
完成,可以探索下一个坑了。
--不要用肉体的勤奋,去掩盖思考的懒惰--