• 【平台开发】— 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. 密码不对的情况:

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

  • 相关阅读:
    Excel中输入身份证后3位变成0,怎么办?
    Css中如何使英文和拼音变成全大写、全小写和首字母大写?
    css中 font常用的样式属性
    Css的向左浮动、先右浮动、绝对定位、相对定位的简单使用
    如何解决Css属性text-overflow:ellipsis 不起作用(文本溢出显示省略号)
    mysql 基本语法学习1(数据库、数据表、数据列的操作)
    sql server中如何将两个字段数据合并成一个字段显示(字段与字段添加特殊符号)
    Linq to Entity 求最大小值Max/Min返回null的处理方法
    C#匿名对象在其它方法体内怎么取到相应的值(不想建立对应的类并转化的情况下)?
    【转发】JQuery中操作Css样式的方法
  • 原文地址:https://www.cnblogs.com/pingguo-softwaretesting/p/13359437.html
Copyright © 2020-2023  润新知