主题
通用定义及工具类
通用定义及相关工具类定义在了pubinfo-boot-common包下,maven坐标如下:
xml
<dependency>
<groupId>cn.zjtele.pubinfo.boot</groupId>
<artifactId>pubinfo-boot-common</artifactId>
</dependency>
响应编码定义
我们定义了响应编码的统一接口(cn.zjtele.pubinfo.common.http.response.code.IResponseCode),以及默认的响应编码实现(cn.zjtele.pubinfo.common.http.response.code.BaseResponseCode)。
IResponseCode接口定义内容如下:
- code:响应编码,前端根据响应不同编码,进行不同的逻辑处理。
- msg:响应信息,通常用来展示给用户的信息。
- hint:提示信息,通常用来返回具体的异常信息,方便开发人员快速定位问题。
默认的响应编码如下:
- code=0:已处理请求,且业务结果正确
- code=4:已处理请求,且业务结果错误
- code=-1:程序运行过程中未知的异常
业务中可以通过实现IResponseCode接口,定义自己的响应编码。
自定义响应码时,有如下约定:
- 业务异常响应码应以默认业务错误响应码4开头,且应以3位代表一个响应码层级。例如 400001代表登录认证相关、400001001表示登录用户被锁定。
- 400001,400002目前是登录认证模块的响应码,因此业务系统应将其避开。
接口响应定义
我们定义了controller接口的统一响应类(cn.zjtele.pubinfo.http.response.ResponseData <T>
),响应体参数定义如下:
- code:响应编码,前端根据响应不同编码,进行不同的逻辑处理。
- msg:响应信息,通常用来展示给用户的信息。
- hint:提示信息,通常用来返回具体的异常信息,方便开发人员快速定位问题。
- data:返回数据。
ResponseData 也定义了快捷创建成功或失败响应的方法,例如ResponseData.success(T data),ResponseData.failed(IResponseCode,T data)等。具体请参考sdk。
请求上下文定义
我们定义了请求上下文(cn.zjtele.pubinfo.common.http.request.RequestContext)及获取上下文的Holder(cn.zjtele.pubinfo.common.http.request.RequestContextHolder),用于在一次http请求链路中,传递当前登录用户的相关信息,RequestContext可以通过RequestContextHolder.getContext()获取。请求上下文默认的内容如下:
- userId:用户id。
- userName:用户姓名。
- loginName:登录名。
- orgId:当前登录组织id。
- orgName:组织名称。
- superAdmin:是否是超级管理员。
- orgList:用户组织列表。
注意
1、请求上下文底层是在登录校验通过后将相关信息设置进ThreadLocal中,如果未经过登录认证,RequestContext中无相关信息。
2、请求上下文是基于通过ThreadLocal实现的,如果在请求链路中,异步处理时,在新启动的线程中,RequestContext中也没有相关信息,需在异步任务外获取后使用。
异常定义
自定义业务异常(cn.zjtele.pubinfo.common.exception.BizLogicException),集成自RuntimeException。相关业务异常,可以通过BizLogicException抛出,统一的Controller异常拦截器会将具体的异常信息封装成ResponseData,返回前端展示。
分页相关定义
分页参数和分页数据定义
java
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class PageBase implements Serializable {
private Long currentPage = 1L;
private Long pageSize = 10L;
private Boolean doSearchTotal = true;
}
java
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper=false)
public class PageData<T> extends PageBase {
public PageData(PageBase pageBase) {
this.setCurrentPage(pageBase.getCurrentPage());
this.setPageSize(pageBase.getPageSize());
this.setDoSearchTotal(pageBase.getDoSearchTotal());
}
public PageData(PageBase pageBase,List<T> records,Long total) {
this.setCurrentPage(pageBase.getCurrentPage());
this.setPageSize(pageBase.getPageSize());
this.setDoSearchTotal(pageBase.getDoSearchTotal());
this.records = records;
this.total = total;
}
private List<T> records;
private Long total;
}
字典
定义了字典翻译注解,可以配合字典组件,完成字典的自动翻译。
主要注解如下:
cn.zjtele.pubinfo.common.dict.annotation.DictTranslate:方法注解,有该注解的方法会会被拦截,进行字典翻译。
cn.zjtele.pubinfo.common.dict.annotation.DictTranslateField:属性注解,有该注解的字段会进行字段翻译。
DictTranslateField的属性如下:
- dictType:字典类型编码,用于指定该字段使用的字典类型。
- dictLabelField:字典标签名写入字段,为空则写入原字段。
工具类
常用工具类包定义了有HttpUtil,PinYin4jUtil、RsaUtil,SaltedSha256Util及UserAgentUtil等,后续可继续更新完善。
线程
定义了线程工厂(cn.zjtele.pubinfo.common.thread.PubInfoThreadFactory),可以指定线程名称前缀。