-
2019-08-13 14:52:27
import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.io.Serializable; @Setter @Getter @Accessors(chain = true) @JsonInclude(JsonInclude.Include.NON_NULL) public class ResultBean<T> implements Serializable { @ApiModelProperty("返回码") private String code; @ApiModelProperty("返回信息") private String desc; @ApiModelProperty("返回数据") private T data; @ApiModelProperty("返回数据总数") private Integer count; public Integer getCount() { return count; } public void setCount(Integer count) { this.count = count; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getDesc() { return desc; } public T getData() { return data; } public ResultBean(T data,ResultEnum resultEnum) { this.code = resultEnum.getCode(); this.desc = resultEnum.getDecs(); this.data = data; } public ResultBean(ResultEnum resultEnum) { this.code = resultEnum.getCode(); this.desc = resultEnum.getDecs(); } public ResultBean(String code, String desc) { this.code = code; this.desc = desc; } public ResultBean setResultEnum(ResultEnum result){ this.code = result.getCode(); this.desc = result.getDecs(); return this; } public ResultBean(T data,ResultEnum resultEnum,Integer count) { this.code = resultEnum.getCode(); this.desc = resultEnum.getDecs(); this.data = data; this.count =count; } public ResultBean() { } /** * 回滚 * @return */ public ResultBean rollback(){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return this; } public ResultBean operation(int i){ if(i > 0){ return this.setResultEnum(ResultEnum.success); }else{ return this.setResultEnum(ResultEnum.error); } } public ResultBean setData(T data, ResultEnum resultEnum){ setData(data); return setResultEnum(resultEnum); } public ResultBean setResultEnum(String code, String desc){ this.code = code; this.desc = desc; return this; } }
枚举
public enum ResultEnum { success("200","操作成功!"), error("-2","操作失败!"), server_error("-500","服务异常"), unlogin("-4","未登录"), denine("403","没有权限"), misPassword("-5","用户名密码不正确"), unknown("-1","用户不存在"), data_existent("-504","数据不存在"), result_empty("-000","查询内容为空"), deleteError("-001","删除数据不存在"), param_isnull("-400","参数为空"), NOT_SYSTEM_API("404","不是系统指定api"), REPEAT("666","数据已存在"), HTTP_ERROR("-405","请求异常"), API_ERROR("1001","") ; private String code; private String decs; public String getCode() { return code; } public String getDecs() { return decs; } ResultEnum(String code, String decs) { this.code = code; this.decs = decs; } }
更多相关内容 -
Java封装接口返回统一格式
2019-03-14 12:53:27Java封装接口返回统一格式 public class Result implements Serializable { private static final long serialVersionUID = -3948389268046368059L; private String code; private String msg; private Ob.....Java封装接口返回统一格式
因为我们每个模块是单独部署的,定义统一格式方便处理
public class Result implements Serializable { private static final long serialVersionUID = -3948389268046368059L; private String code; private String msg; private Object data; public Result() {} public Result(String code, String msg) { this.code = code; this.msg = msg; } public static Result success() { Result Result = new Result(); Result.setCode(ResponseCode.SUCCESS); return Result; } public static Result success(Object data) { Result Result = new Result(); Result.setCode(ResponseCode.SUCCESS); Result.setData(data); return Result; } public static Result failure(String code, String msg) { Result Result = new Result(); Result.setCode(code); Result.setMsg(msg); return Result; } public static Result failure(String code, String msg, Object data) { Result Result = new Result(); Result.setCode(code); Result.setMsg(msg); Result.setData(data); return Result; } public String getCode() { return this.code; } public void setCode(final String code) { this.code = code; } public String getMsg() { return this.msg; } public void setMsg(final String msg) { this.msg = msg; } public Object getData() { return this.data; } public void setData(final Object data) { this.data = data; } }
因为我们项目有约定,code值只能返回下面这些,msg自定义,所以不能采用枚举,用枚举会更简洁。
public final class ResponseCode { public static final String SUCCESS = "100"; //成功 public static final String ERROR_999 = "999";// 系统异常 public static final String ERROR_PARAMS_VALIDATOR="200"; //参数验证错误 public static final String ERROR_SERVICE_VALIDATOR="300"; //业务验证错误 public static final String ERROR_DATA_VALIDATOR="400"; //系统数据错误 }
用法:
@RequestMapping("save") public Result save(@RequestBody Register register) { int result = mapper.insert(register); if (result == 1) { return Result.success(); } return Result.failure(ResponseCode.ERROR_999,"系统异常"); }
下面是采用枚举的方式:
public class Result implements Serializable { private static final long serialVersionUID = -3948389268046368059L; private Integer code; private String msg; private Object data; public Result() {} public Result(Integer code, String msg) { this.code = code; this.msg = msg; } public static Result success() { Result result = new Result(); result.setResultCode(ResultCode.SUCCESS); return result; } public static Result success(Object data) { Result result = new Result(); result.setResultCode(ResultCode.SUCCESS); result.setData(data); return result; } public static Result failure(ResultCode resultCode) { Result result = new Result(); result.setResultCode(resultCode); return result; } public static Result failure(ResultCode resultCode, Object data) { Result result = new Result(); result.setResultCode(resultCode); result.setData(data); return result; } public void setResultCode(ResultCode code) { this.code = code.code(); this.msg = code.message(); } public Integer getCode() { return this.code; } public void setCode(final Integer code) { this.code = code; } public String getMsg() { return this.msg; } public void setMsg(final String msg) { this.msg = msg; } public Object getData() { return this.data; } public void setData(final Object data) { this.data = data; } }
public enum ResultCode { // 自定义状态码 SUCCESS(0, "成功"), FAIL(1,"失败"); private Integer code; private String message; ResultCode(Integer code, String message) { this.code = code; this.message = message; } public Integer code() { return this.code; } public String message() { return this.message; } public static String getMessage(String name) { for (ResultCode item : ResultCode.values()) { if (item.name().equals(name)) { return item.message; } } return name; } public static Integer getCode(String name) { for (ResultCode item : ResultCode.values()) { if (item.name().equals(name)) { return item.code; } } return null; } }
用法:
@RequestMapping("save") public Result save(@RequestBody Register register) { int result = mapper.insert(register); if (result == 1) { return Result.success(); } return Result.failure(ResultCode.FAIL); }
-
java后端接口对返回数据进行封装工具类
2020-03-12 00:20:27BaseResult.java package com.basic.hellorabbit.util; import java.io.Serializable; import java.util.List; /** * @Description: 对返回数据进行封装 * @Author: Joe * @CreateDate: 2020/3/12 0:06 */ p...BaseResult.java
package com.basic.hellorabbit.util; import java.io.Serializable; import java.util.List; /** * @Description: 对返回数据进行封装 * @Author: Joe * @CreateDate: 2020/3/12 0:06 */ public class BaseResult implements Serializable { public static final String RESULT_OK = "ok"; public static final String RESULT_NOT_OK = "not_ok"; public static final String SUCCESS = "成功操作"; /** * 信息说明 */ private String result; /** * 数据 */ private Object data; /** * 成功说明 */ private String success; /** * 分页信息 */ private Cursor cursor; /** * 错误集合 */ private List<Error> errors; public static String getResultOk() { return RESULT_OK; } public static String getResultNotOk() { return RESULT_NOT_OK; } public static String getSUCCESS() { return SUCCESS; } public String getResult() { return result; } public void setResult(String result) { this.result = result; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public String getSuccess() { return success; } public void setSuccess(String success) { this.success = success; } public Cursor getCursor() { return cursor; } public void setCursor(Cursor cursor) { this.cursor = cursor; } public List<Error> getErrors() { return errors; } public void setErrors(List<Error> errors) { this.errors = errors; } /** * 成功,无数据,有说明 * @return */ public static BaseResult ok(){ return createResult(RESULT_OK,null,SUCCESS,null,null); } /** * 成功,无数据,自定义说明 * @return */ public static BaseResult ok(String success){ return createResult(RESULT_OK,null,success,null,null); } /** * 成功,有数据,有说明 * @return */ public static BaseResult ok(Object data){ return createResult(RESULT_OK,data,SUCCESS,null,null); } /** * 成功,有数据,有说明,带分页信息 * @return */ public static BaseResult ok(Object data, Cursor cursor){ return createResult(RESULT_OK,data,SUCCESS,cursor,null); } /** * 失败,无数据,无说明,带错误信息 * @return */ public static BaseResult notOk(List<BaseResult.Error> errors){ return createResult(RESULT_NOT_OK,null,"",null,errors); } /** * 失败,无数据,无说明,无错误信息 * @return */ public static BaseResult notOk(){ return createResult(RESULT_NOT_OK,null,"",null,null); } private static BaseResult createResult(String result,Object data,String success,Cursor cursor,List<Error> errors){ BaseResult baseResult = new BaseResult(); baseResult.setResult(result); baseResult.setData(data); baseResult.setSuccess(success); baseResult.setCursor(cursor); baseResult.setErrors(errors); return baseResult; } /** * 分页信息类 */ public static class Cursor{ /** * 总条数 */ private int total; /** *当前页 */ private int offset; /** * 每页条数 */ private int limit; } /** * 错误信息类 */ public static class Error{ /** * 字段 */ private String field; /** * 错误描述 */ private String message; public String getField() { return field; } public void setField(String field) { this.field = field; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Error() { } public Error(String field, String message) { this.field = field; this.message = message; } @Override public String toString() { return "Error{" + "field='" + field + '\'' + ", message='" + message + '\'' + '}'; } } }
-
java常用工具类和接口返回对象.zip
2020-03-11 09:08:17java常用工具类和接口返回对象,方便开发调用,提高开发效率,很不错的代码。 -
java 接口返回json数据封装
2020-04-30 16:22:45首先,采用的是springboot,在controller中使用了@RestController或者@ResponseBody注解,返回的数据本身就是json格式。但是这样的json串在前后端分离使用中并不满足实际的效果,因此需要进行相应的封装,以满足前端...前言
首先,采用的是springboot,在controller中使用了@RestController或者@ResponseBody注解,返回的数据本身就是json格式。但是这样的json串在前后端分离使用中并不满足实际的效果,因此需要进行相应的封装,以满足前端能够正确处理获取的数据。
一、准备
1.1 使用的是fastjson,因此需要pom文件引入包
版本随你
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency>
1.2 统一的返回规范必不可少
一般情况下,状态、信息、数据这三项已经满足大部分需要。如果需求特殊可以自己修改。
序列化
值得说一下的是重写tostring时就将其转换为json串JSON.toJSONString(this);。本文所用的返回类进行了实例化,因此采用JSON.方法,也可以通过JSONObject(已经实现序列化,返回类不需要再次序列化)的方发进行转换。
为空处理
利用fastjson自带的注解来处理返回时无值得情况,统一显示为null。@JSONField(serialzeFeatures = {SerializerFeature.WriteMapNullValue})import java.io.Serializable; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.serializer.SerializerFeature; /** * * @Description: 统一API响应结果封装 * @author ZhiPengyu * @date: 2020年4月29日 下午2:48:18 */ public class ResponseBody implements Serializable { /** * */ private static final long serialVersionUID = 1886106011131539131L; private String code; private String message; @JSONField(serialzeFeatures = {SerializerFeature.WriteMapNullValue}) private Object data; /* set and get */ public String getCode() { return code; } public void setCode(String 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; } /* 构造 */ public ResponseBody() { super(); // TODO Auto-generated constructor stub } public ResponseBody(String code, String message, Object data) { super(); this.code = code; this.message = message; this.data = data; } /** * 默认成功或者失败,无数据 * @param resultCode */ public ResponseBody(ResultCode resultCode) { this.code = resultCode.getCode(); this.message = resultCode.getMessage(); } /** * 枚举结果以及获取数据 * @param resultCode * @param data */ public ResponseBody(ResultCode resultCode,String message) { this.code = resultCode.getCode(); this.message = message; } /** * 枚举结果以及获取数据 * @param resultCode * @param data */ public ResponseBody(ResultCode resultCode,Object data) { this.code = resultCode.getCode(); this.message = resultCode.getMessage(); this.data = data; } @Override public String toString() { return JSON.toJSONString(this); } }
二、封装
为了更好的进行操作,将操作细节隐藏封装。
2.1枚举
就是状态码的统一操作,这样是更加规范的,对前端也一样。
/** * * @Description: 响应码枚举,参考HTTP状态码的语义 * @author ZhiPengyu * @date: 2020年4月29日 上午9:27:40 */ public enum ResultCode { /* 成功 */ SUCCESS("200", "Success!"), /* 失败 */ FAIL("400", "Failure!"), /* 参考HTTP状态码 */ NO_PERMISSION("403", "Need Authorities!"),//没有权限 LOGIN_NO("402", "Need Login!"),//未登录 LOGIN_FAIL("401", "Login Failure!"),//登录失败 LOGIN_SUCCESS("200", "Login Success!"),//登录成功 LOGOUT_SUCCESS("200", "Logout Success!"),//退出登录 SESSION_EXPIRES("101", "Session Expires!"),//会话到期 SESSION_EXPIRES_OTHER_LOGIN("101", "Session Expires!Other users login!"),//会话到期,其他用户登录 private String code; private String message; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } /** * * @param code * @param message */ ResultCode(String code, String message) { this.code = code; this.message = message; } }
2.2封装
利用**@Component**注解简化用户在返回数据是复杂复制操作,同时减少自定义的使用,以枚举为主,可以不断添加。
import org.springframework.stereotype.Component; @Component public class ResultGenerator{ /** * 默认成功,无数据 * @return */ public ResponseBody getSuccessResult() { return new ResponseBody(ResultCode.SUCCESS); } /** * 默认成功,有数据 * @param data * @return */ public ResponseBody getSuccessResult(Object data) { return new ResponseBody(ResultCode.SUCCESS,data); } /** * 默认失败,无数据 * @return */ public ResponseBody getFailResult() { return new ResponseBody(ResultCode.FAIL); } /** * 默认失败 * @param message 自定义失败信息 * @return */ public ResponseBody getFailResult(String message) { return new ResponseBody(ResultCode.FAIL,message); } /** * 采用枚举中的状态无数据返回 * @param resultCode 响应码枚举 * @param data * @return */ public ResponseBody getFreeResult(ResultCode resultCode) { return new ResponseBody(resultCode); } /** * 采用枚举中的状态带数据返回 * @param resultCode 响应码枚举 * @param data * @return */ public ResponseBody getFreeResult(ResultCode resultCode, Object data) { return new ResponseBody(resultCode, data); } /** * 自定义返回信息 * @param code 响应码 * @param message 自定义失败信息 * @param data * @return */ public ResponseBody getFreeResult(String code, String message, Object data) { return new ResponseBody(code, message, data); } }
三、使用
以往都是在controller进行new操作同时,此时可以通过**@Autowired**注解调用并直接赋值返回。
如上图所示,通过不同的方式进行对比。3.1未完全封装
@PreAuthorize("hasRole('ROLE_admin')") @RequestMapping(value = "getSysUserAdmin") public ResponseBody getSysUserAdmin() { ResponseBody responseBody = new ResponseBody(); responseBody.setCode("200"); responseBody.setMessage("Sccess!"); List<SysUser> sysUser = sysUserService.select(null, null); responseBody.setData(JSON.toJSONString(sysUser)); return responseBody; }
{ "code": "200", "message": "Sccess!", "data": "[{\"company\":\"科研诚信\",\"createtime\":1586942036000,\"parentName\":\"admin\",\"password\":\"$2a$10$XlftNY9T52IbLlVAT6Nx7ezyYlcSFkVzC.3n3h5jihyzo1g/KtAPa\",\"pwdRole\":1,\"role\":2,\"status\":1,\"uploadAmount\":3,\"uploadResidue\":0,\"userId\":27,\"userIp\":\"89\",\"username\":\"admin1\"}]" }
3.2完全封装
可以看出差距还是不小的。
@Autowired ResultGenerator resultGenerator; @RequestMapping(value = "testjson") public ResponseBody testjson() { List<SysUser> sysUser = sysUserService.selectSysUserByUnameOrCompany(null, null); return resultGenerator.getSuccessResult(sysUser); }
{ "code": "200", "message": "Success!", "data": [ { "userId": 27, "username": "admin1", "password": "$2a$10$XlftNY9T52IbLlVAT6Nx7ezyYlcSFkVzC.3n3h5jihyzo1g/KtAPa", "parentName": "admin", "company": "科研诚信", "cpyBranch": null, "userIp": "89", "uploadAmount": 3, "uploadResidue": 0, "status": 1, "role": 2, "pwdRole": 1, "createtime": "2020-04-15T09:13:56.000+0000", "startTime": null, "endTime": null, "phoneNumber": null, "mail": null, "remark": null } ] }
四、总结
此文是在查看一些文章之后的总结修改,大同小异,方式多种多样。再次仅说了一种,那些地方说不不对,还请留言矫正啊。
-
java返回值封装.zip
2020-07-23 15:16:27为了解决java前后端分离,与app接口对接等需要返回restful接口的程序, 整理的接口返回值封装(符合RESTful),简单好用 -
请求返回数据封装类
2019-04-23 20:39:23该代码封装了网络请求的返回数据用于返回前段 -
在JAVA中封装JSON数据
2019-04-09 01:03:37NULL 博文链接:https://hzywy.iteye.com/blog/1618266 -
Java访问WebService返回XML数据的方法
2020-09-03 16:05:16主要介绍了Java访问WebService返回XML数据的方法,涉及java操作WebService的相关技巧,需要的朋友可以参考下 -
java方法通用返回结果集封装操作
2021-02-25 18:23:43我们在封装方法的时候,有的时候除了需要返回数据结果集data,有的时候需要返回code(或者status) 或者 msg ,此时可以采取下面两种方式进行封装方法的返回值:一.返回结果使用HashMap接收1.方法中的数据封装到hashmap... -
spring 统一再处理接口返回的json数据
2019-01-14 15:14:19最近公司项目出现这样一个...在spring框架下,可以利用ResponseBodyAdvice接口,实现该接口则能够在声明了ResponseBody注解的controller返回json数据前,统一对json数据做处理,将资源地址的url统一替换为cdn资源url。 -
java开发对controller返回数据统一封装结果集
2022-02-15 22:51:27在日常开发中前后端对接一般要约定好某种规则,比如说一个接口甲同学返回code=100表示返回成功数据,乙同学返回code=200表示返回成功数据,就会形成很多各自的规则,前端对接起来也麻烦,因此针对这种情况要进行同一... -
springboot 封装接口返回类
2019-07-30 11:13:03接口调用或者前后端交互都必不可少一个返回的封装类 ResponseMessage.java package com.hiqiblog.ViewModel; public class ResponseMessage<T> { private static final String CODE_SUCCESS = "200"; ... -
java后端封装标准返回类到前端
2019-08-03 10:54:37在日常开发中,我们后端和前端最好是约定一个数据格式,用于后端封装好数据,然后返回前端,前端就可以很简单地就解析了,下面是我总结出来经常会那么用的模板,可以参考一下: 1、创建对象 直接在实体包下面新建... -
SSH封装接口返回Json数据
2014-03-26 15:09:17SSH封装接口返回Json数据 数据库是Mysql -
统一接口返回类的封装Result,超简单易懂适合新手
2021-09-05 19:23:42基于java的前后端分离项目中,前端获取后端controller层接口返回的JSON格式的数据,并展示出来。通常为了提高代码质量,会将后端返回的数据进行统一的格式处理。 自定义工具类取名为Result import lombok.Data; ... -
【java】怎样优化接口返回大体量数据?
2021-04-17 11:10:38需求描述:外围平台调用接口根据手机号查询用户的歌单推荐信息,每个用户会有一...这样的话接口返回会比较慢。想过提前将数据放redis集群,但是后来否定了,因为用户量大概是500多万,每个用户的推荐信息大小大概20... -
超好用的统一API响应结果封装
2020-07-30 17:15:20超好用的统一API响应结果封装 包含返回成功/失败 里面返回POJO统一为泛型 可以直接拿到项目中使用 -
Java接口自动化测试框架设计-4-POST请求方法封装过程和测试
2018-05-22 23:48:38这个接口自动化测试框架到目前为止,我们已经完成了Get请求的封装和必要的工具类的支持。...所以,这个Java接口自动化测试框架的核心就是Get和POST请求方法的封装过程。 1.POST接口举例浏览器打开https://re... -
Java http接口返回值封装实体类
2019-10-31 10:31:45/* 服务器成功返回用户请求数据的状态码 */ public static String SUCCESS_GETS_CODE = "200"; /* 服务器成功返回用户请求数据的提示信息 */ public static String SUCCESS_GETS_MSG = "ok"; /* 新建或... -
Java通用接口响应封装类
2020-01-14 00:42:07Java接口响应封装类 Web开发中,前后分离是个趋势,现在大部分公司研发部门已经在走前后分离的路子了,前后分离开发各司其职能够有效的提高工作效率和开发质量。 REST接口会返回各种各样的数据,如果对接口的格式不... -
Java调用HTTP接口及返回json数据讲解
2020-12-17 17:17:42本文主要为了总结一下Java常用基础中关于http接口调用以及前后端json数据的返回方式,案例如下,如有误区或不足,还请大佬多多指教。话不多说,直接码 一,Java调用http接口 在我们开发代码的过程中常常会涉及到调用... -
(七) spring boot 接口返回结果封装&&对象json的转换
2019-11-28 16:00:12对于很多时候,都是使用前后端分离的形式来写的接口,所以对于数据返回的规定是必不可少的,在我们日常的...接口返回结果封装 添加Result类 在util包中添加类Result import java.io.Serializable; import java.uti... -
java调用C#接口及所涉及到的架包
2014-09-30 17:49:44Java调用C#接口封装和所涉及到的架包