前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从0到1开发测试平台(九)后端对接口response的封装

从0到1开发测试平台(九)后端对接口response的封装

作者头像
周辰晨
发布2020-08-10 15:26:19
4500
发布2020-08-10 15:26:19
举报

在进行接口开发时,一般需要一个固定的返回样式,成功和失败的时候,都按照这种格式来进行统一的返回,这样,在与其他人进行接口之间的联调时不会显得很杂乱无章,并且前端方便对返回结果统一处理。而这种固定的格式如果放在Java的每个接口单独处理时,又会在接口开发时很繁琐,所以这个时候可以采用封装一个实体类,统一返回固定模板格式的内容。

现在对我们之前写的登录接口返回进行统一封装处理。

新建common包,并且在common包里新建StatusCode.java,这个类主要是统一定义程序里用到的错误码

package com.caomingyu.cctestplatform.common;

public class StatusCode {

    //请登录
    public static final Integer NEED_LOGIN = 401;
    /** 操作成功*/
    public static final Integer OPERATIONSUCCESS = 200;
    /** 用户名/密码错误*/
    public static final Integer USER_NAME_OR_PASSWORD_EORROR = 1011;
    /** 用户不存在*/
    public static final Integer USER_NOT_EXIST = 1012;
    /** 用户名不能为空*/
    public static final Integer USER_NAME_NULL = 1013;
    /** 密码不能为空*/
    public static final Integer USER_PASS_NULL = 1014;
}

在common包里新建ResultType.java,这个类是用来定义相应错误码对应的话术

package com.caomingyu.cctestplatform.common;

public class ResultType {
    public static final String NEED_LOGIN = "温馨提示:请使用对应的账号登录";
    public static final String LOGIN_SUCCESS = "登录成功";
    public static final String USER_NAME_OR_PASSWORD_EORROR = "用户名/密码错误";
    public static final String USER_NOT_EXIST = "用户不存在";
    public static final String USER_NAME_NULL = "用户名不能为空";
    public static final String USER_PASS_NULL = "密码不能为空";
}

在bean包新建Page.java和Result.java,其中page是用来返回分页信息的,Result是统一返回结果

package com.caomingyu.cctestplatform.bean;

import lombok.Data;
import org.springframework.stereotype.Component;

/**
 * Created by caomingyu on 2019/2/17.
 */
@Data
@Component
public class Page {
    private static final long serialVersionUID = 1L;
    private int pageNum;
    private int pageSize;
    private int startRow;
    private int endRow;
    private long total;
    private int pages;
    private boolean count;
    private Boolean reasonable;
    private Boolean pageSizeZero;
    private String countColumn;
    private String orderBy;
    private boolean orderByOnly;
}
package com.caomingyu.cctestplatform.bean;

import com.caomingyu.cctestplatform.common.StatusCode;
import lombok.Data;

import java.io.Serializable;

@Data
public class Result implements Serializable {
    /** 成功失败 */
    private boolean success;
    /** 状态码 */
    private Integer code;
    /** 返回结果集 */
    private Object data;
    /** 信息 */
    private String message;
    /**分页信息 */
    private Page pageInfo;

    /** 前端弹窗模式:"warning", "error", "success", "info" */
    private String icon;
    public Result() {}

    public Result(boolean success, String message) {
        this.success = success;
        this.message = message;
        if (success) icon = "success";
        else icon = "error";
    }

    public Result(boolean success, Integer code, String message) {
        this(success, message);
        this.code = code;
    }

    public Result(boolean success, Integer code, Object data, String message) {
        this(success, code, message);
        this.data = data;
    }


    public static Result result(Object data, boolean success, Integer code, String message) {
        Result result = new Result();
        result.data = data;
        result.success = success;
        result.message = message;
        result.code = code;
        return result;
    }

    public static Result result(Object data, Page pageInfo, boolean success, Integer code, String message) {
        Result result = new Result();
        result.pageInfo = pageInfo;
        result.data = data;
        result.success = success;
        result.message = message;
        result.code = code;
        return result;
    }


    //返回成功结果
    public static  Result resultSuccess(Page pageInfo, Object data, String message) {
        Result result = new Result();
        result.success = true;
        result.code = StatusCode.OPERATIONSUCCESS;
        result.message = message;
        result.pageInfo = pageInfo;
        result.data = data;
        return result;
    }

    //返回失败
    public static  Result resultError(String message, int code) {
        Result result = new Result();
        result.success = false;
        result.message = message;
        result.code = code;
        return result;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getIcon() {
        return icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }

    public Page getPageInfo() {
        return pageInfo;
    }

    public void setPageInfo(Page pageInfo) {
        this.pageInfo = pageInfo;
    }
}

对UserController.java和UserServiceImpl.java中的login方法进行统一返回的修改

package com.caomingyu.cctestplatform.controller;

import com.caomingyu.cctestplatform.bean.Result;
import com.caomingyu.cctestplatform.bean.User;
import com.caomingyu.cctestplatform.common.ResultType;
import com.caomingyu.cctestplatform.common.StatusCode;
import com.caomingyu.cctestplatform.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/v1/user")
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/login")
    public Result login(@RequestBody User user){
        if (user == null){
            return Result.resultError(ResultType.USER_NAME_NULL, StatusCode.USER_NAME_NULL);
        }
        if (user.getUserName() == null || "".equals(user.getUserName())){
            return Result.resultError(ResultType.USER_NAME_NULL, StatusCode.USER_NAME_NULL);
        }
        if (user.getPassword() == null || "".equals(user.getPassword())){
            return Result.resultError(ResultType.USER_PASS_NULL, StatusCode.USER_PASS_NULL);
        }
        return userService.login(user.getUserName(), user.getPassword());
    }
}
package com.caomingyu.cctestplatform.service.impl;

import com.caomingyu.cctestplatform.bean.Result;
import com.caomingyu.cctestplatform.bean.User;
import com.caomingyu.cctestplatform.common.ResultType;
import com.caomingyu.cctestplatform.common.StatusCode;
import com.caomingyu.cctestplatform.dao.UserDao;
import com.caomingyu.cctestplatform.service.UserService;
import com.caomingyu.cctestplatform.util.Md5Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;

    @Override
    public User queryUserByName(String userName) {
        return userDao.queryUserByName(userName);
    }

    @Override
    public Result login(String userName, String password) {
        User user = queryUserByName(userName);
        if (user == null){
            return Result.resultError(ResultType.USER_NOT_EXIST, StatusCode.USER_NOT_EXIST);
        }
        String passwordParam = Md5Utils.string2MD5(password);
        if (!passwordParam.equals(user.getPassword())){
            return Result.resultError(ResultType.USER_NAME_OR_PASSWORD_EORROR, StatusCode.USER_NAME_OR_PASSWORD_EORROR);
        }
        return Result.resultSuccess(null,null,ResultType.LOGIN_SUCCESS);;
    }
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师影响力 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档