Skip to content

通用定义及工具类

通用定义及相关工具类定义在了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),可以指定线程名称前缀。