电商商城服务端开发--高复用的服务端响应代码设计
2017-07-22 08:16
274 查看
我们开发会从第一个模块用户登录模块开始,在开发之前我会把各个模块对象与服务器端的响应逻辑封装成一个简单的对象(ServerResponse),方便我们随时使用,例如:
相信大家已经看到了我的设计过程,首先这个响应对象有三个私有成员变量 status,msg,data,分表表示响应状态,响应消息,返回数据类型,例如说我已经注册好开始登录,如果密码错误,这个响应对象里要返回给前端的就是status为 1,msg “登录失败”,data的话可不返回,其中我还想说一下两个注解,
//将该标记放在属性上,如果该属性为NULL则不参与序列化
//如果放在类上边,那对这个类的全部属性起作用
//Include.Include.ALWAYS 默认
//Include.NON_DEFAULT 属性为默认值不序列化
//Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化
//Include.NON_NULL 属性为NULL 不序列化 。
接着是用到的ResponseCode响应代码的枚举类如下:
相信大家等看懂吧,如有需要源码或者有什么问题的可以私下找我,微信:413007703邮箱yangtianrui135@163.com.
完整源码【包含redis分布式缓存 分布式session 定时任务 主从同步。。。。】https://gitee.com/ytrlmy/happy_mmall/tree/v2.0/
public class ServerResponse<T> implements Serializable利用泛型的设计思想来提高响应的各种需求,并且实现序列化,同时,在响应的逻辑中会用到枚举类,比如说一些响应的状态(成功SUCUSS 0表示,失败ERROR 1表示)等等,还有登录觉色的判断。
package com.mmall.common; import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.map.annotate.JsonSerialize; import java.io.Serializable; /** * 2017年-7-22 */ @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) //保证json序列化的时候,如果是null的对象,key也会消失 public class ServerResponse<T> implements Serializable { private int status; //响应状态 private String msg;//响应消息 private T data; // 范型的数据类型 可以是空,字符串,对象,List等等 private ServerResponse(int status){ this.status = status; } private ServerResponse(int status,T data){ this.status = status; this.data = data; } private ServerResponse(int status,String msg,T data){ this.status = status; this.msg = msg; this.data = data; } private ServerResponse(int status,String msg){ this.status = status; this.msg = msg; } @JsonIgnore //使之不在json序列化结果当中 public boolean isSuccess(){ return this.status == ResponseCode.SUCCESS.getCode(); } public int getStatus(){ return status; } public T getData(){ return data; } public String getMsg(){ return msg; } public static <T> ServerResponse<T> createBySuccess(){ return new ServerResponse<T>(ResponseCode.SUCCESS.getCode()); } public static <T> ServerResponse<T> createBySuccessMessage(String msg){ return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg); } public static <T> ServerResponse<T> createBySuccess(T data){ return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),data); } public static <T> ServerResponse<T> createBySuccess(String msg,T data){ return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg,data); } public static <T> ServerResponse<T> createByError(){ return new ServerResponse<T>(ResponseCode.ERROR.getCode(),ResponseCode.ERROR.getDesc()); } public static <T> ServerResponse<T> createByErrorMessage(String errorMessage){ return new ServerResponse<T>(ResponseCode.ERROR.getCode(),errorMessage); } public static <T> ServerResponse<T> createByErrorCodeMessage(int errorCode,String errorMessage){ return new ServerResponse<T>(errorCode,errorMessage); } }
相信大家已经看到了我的设计过程,首先这个响应对象有三个私有成员变量 status,msg,data,分表表示响应状态,响应消息,返回数据类型,例如说我已经注册好开始登录,如果密码错误,这个响应对象里要返回给前端的就是status为 1,msg “登录失败”,data的话可不返回,其中我还想说一下两个注解,
@JsonIgnore和@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL),第一个表示该属性或者方法但参与序列化的进行,不会出现在序列化的结果中,相反的是我们还可以通过后者过滤一些情况,比如当我的某个属性为空的时候,不出现序列化的结果中,并且我还列举了一些同等级的情况如下:
//将该标记放在属性上,如果该属性为NULL则不参与序列化
//如果放在类上边,那对这个类的全部属性起作用
//Include.Include.ALWAYS 默认
//Include.NON_DEFAULT 属性为默认值不序列化
//Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化
//Include.NON_NULL 属性为NULL 不序列化 。
接着是用到的ResponseCode响应代码的枚举类如下:
public enum ResponseCode { SUCCESS(0,"SUCCESS"), // 成功 ERROR(1,"ERROR"), // 失败 NEED_LOGIN(10,"NEED_LOGIN"), // 未登录 ILLEGAL_ARGUMENT(2,"ILLEGAL_ARGUMENT"); //参数错误 private final int code; private final String desc; ResponseCode(int code,String desc){ this.code = code; this.desc = desc; } public int getCode(){ return code; } public String getDesc(){ return desc; } }
相信大家等看懂吧,如有需要源码或者有什么问题的可以私下找我,微信:413007703邮箱yangtianrui135@163.com.
完整源码【包含redis分布式缓存 分布式session 定时任务 主从同步。。。。】https://gitee.com/ytrlmy/happy_mmall/tree/v2.0/
相关文章推荐
- 模块化设计,面向接口开发。不断重构设计和代码,一个大幅提高开发效率的好方法:不断重构既有代码和设计,为复用准备。同时也是优化。
- 跳出低级开发的怪圈,走向更高的层次,不仅仅只关注代码,而更要上升为设计,复用等
- 移动电商:商城、分销系统、代理分销系统开发设计
- 电商商城服务端开发-环境配置
- Symbian 3rd 开发蓝牙OBEX 详细设计与代码
- SharePoint无代码工作流设计开发实例——交通费报销流程(三)
- 微信 开发 聊天机器人设计方案 java语言 程序和数据库代码
- 微信商城开发实战 代码下载地址
- 电商平台技术架构 多用户商城 仿天猫 淘宝 亚马逊 当当 阿里巴巴 大数据模块 低成本运维 高效开发
- iOS开发:代码通用性以及其规范 第一篇(附带,自定义UITextView\进度条\双表显示\瀑布流 代码设计思路)
- Java开发中的23种设计模式详解及代码和图解
- 完美代码-----读书笔记(2)类设计与原型开发
- 大型Java多用户商城系统设计开发的心得和困难
- Atitit.uml2 api 的编程代码实现设计uml开发 使用eclipse jar java 版本
- 【转载】"变化"、"复用"、"抽象"、"稳定" 影响着软件设计模式,架构,开发方法
- Android TV开发:使用RecycleView实现横向的Listview并响应点击事件的代码
- SharePoint无代码工作流设计开发实例——交通费报销流程(三)
- 对于开发 0 bug 代码的思考——Design by Contract 契约设计
- ShopNC 商城系统开发经验分享第五篇: 缓存设计
- 框架底层综合+快速开发+代码重用框架-设计(Action)层)