从0到1开发测试平台(九)后端对接口response的封装
时间:2022-07-23
本文章向大家介绍从0到1开发测试平台(九)后端对接口response的封装,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在进行接口开发时,一般需要一个固定的返回样式,成功和失败的时候,都按照这种格式来进行统一的返回,这样,在与其他人进行接口之间的联调时不会显得很杂乱无章,并且前端方便对返回结果统一处理。而这种固定的格式如果放在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);;
}
}
- 厚土Go学习笔记 | 08. 零值
- Unity应用架构设计(10)——绕不开的协程和多线程(Part 1)
- 代码审计|PHP代码执行函数进阶版实力上线了!
- Golang中巧用defer进行错误处理
- Unity应用架构设计(10)——绕不开的协程和多线程(Part 2)
- 厚土Go学习笔记 | 07. 基本类型
- Unity应用架构设计(11)——一个网络层的构建
- Go语言·Web调优详解
- Unity应用架构设计(12)——AOP思想的实践
- 厚土Go学习笔记 | 26. 函数闭包
- 学会代码执行函数,让老哥带你勇闯天涯!
- ASP.NET Core知多少(6):VS Code联调Angular + .NetCore
- 线程安全知多少
- Parallel线程安全问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 每日一题 | QQ群撩妹问题
- 每日一题 | 老板出的下棋问题
- Qt音视频开发12-mpv解码播放
- 算法专题 | 10行代码实现的最短路算法——Bellman-ford与SPFA
- 每日一题 | 土豪割草问题
- 高阶面试:伯努利过程
- Python 分析电影《南方车站的聚会》
- Python 基础(十八):命名空间 & 作用域
- Python爬虫(三):BeautifulSoup库
- Python 爬虫(四):Selenium 框架
- Python 爬虫(五):PyQuery 框架
- Python 爬虫(六):Scrapy 爬取景区信息
- Python 爬虫(七):pyspider 使用
- 你的童年有俄罗斯方块吗?教你用 Python 实现俄罗斯方块!
- Python 基础(七):字典与集合