前面实现了一个简单的登录,接下来开发的是项目管理功能。
但是在写完项目列表接口后,发现了重复代码的情况,这时候就需要重构下代码了。
一、代码冗余
首先看下之前写的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("用户名或密码错误"); } }
请求下接口,验证一下。
- 用户名密码都正确的情况:
- 密码不对的情况:
完成,可以探索下一个坑了。