【平台开发】— 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("用户名或密码错误");
        }
    }

请求下接口,验证一下。

  1. 用户名密码都正确的情况:

  2. 密码不对的情况:

完成,可以探索下一个坑了。

posted @ 2020-07-22 10:59  把苹果咬哭的测试笔记  阅读(226)  评论(0编辑  收藏  举报