frame-base 顾名思义,就是定义一些基础的类。便于框架进行规约。
主要有(不限于)如下几点:
1.接口基类
public class BaseController {
/**
* 接口标准响应
* @param codeDetail 错误码编码
* @param message 错误码描述
* @param data
* @return
* @param <T>
*/
public <T> ResponseData<T> responseData(String codeDetail, String message, T data) {
return new ResponseData(codeDetail, message, data);
}
}
2.DTO(数据传输对象)基类
/**
* DTO基类
*/
@Data
public class BaseDTO implements Serializable {
private static final long serialVersionUID = -23423423423L;
}
3.分页的出入参
入参:
/**
* 标准分页查询入参
*/
@Data
@Builder
public class PageRequestDTO extends BaseDTO {
/**
* 第几页
*/
private Integer pageIndex;
/**
* 每页记录数目
*/
private Integer pageSize;
}
出参:
@Builder
@Data
public class PageResponseDTO<T> extends BaseDTO {
/**
* 当前第几页
*/
private Integer pageIndex;
/**
* 每页记录数
*/
private Integer pageSize;
/**
* 记录总数
*/
private Integer count;
/**
* 具体数据记录list
*/
private List<T> dataList;
}
4.接口返回的响应体
@Builder
@Data
public class ResponseData<DTO> extends BaseDTO {
/**
* 响应码
*/
private String code;
/**
* 响应描述
*/
private String msg;
/**
* 真实业务数据
*/
private DTO data;
}
5.异常基类
基本异常基类:
/**
* 运行时异常基类
*/
public class BaseRuntimeException extends RuntimeException {
protected String code;
protected String msg;
public BaseRuntimeException(String message, Throwable cause) {
super(message, cause);
this.msg = message;
}
public BaseRuntimeException(String code, String message) {
super(message);
this.code = code;
this.msg = message;
}
}
业务异常基类:
/**
* 基本业务异常,所有业务异常都基于此,便于框架的统一异常处理
*/
public class BaseBusinessException extends BaseRuntimeException {
public BaseBusinessException(String message, Throwable cause) {
super(message, cause);
}
public BaseBusinessException(String code, String message) {
super(code,message);
}
}
当然,我们可以扩展不同的异常类型,比如业务校验异常、警告类异常等……
6.统一异常处理
/**
* 全局异常处理
*/
@ResponseBody
@ControllerAdvice
public class GlobalExceptionHandler {
private static String DEFAULT_ERROR_CODE = "500";
private static String DEFAULT_ERROR_MSG = "未知异常";
@ExceptionHandler
public ResponseData handler(BaseBusinessException e) {
return ResponseData.builder().code(e.getCode()).msg(e.getMsg()).build();
}
@ExceptionHandler
public ResponseData handler(BaseRuntimeException e) {
return ResponseData.builder().code(e.getCode()).msg(e.getMsg()).build();
}
/**
* 兜底处理
* @param e
* @return
*/
@ExceptionHandler
public ResponseData handler(Throwable e) {
return ResponseData.builder().code(DEFAULT_ERROR_CODE).msg(DEFAULT_ERROR_MSG).build();
}
}
当然,这些异常处理方法可以根据新的异常类别进行扩展。
以上是web开发常用的基类信息。基本涵盖了一个接口的所有结构。
写在最后
由上述代码可以得知,框架开发就是把共性问题抽出来,然后统一定义和处理。而这个能力表现在:
1.规范
接口规范包含:入参、出参、异常码、异常处理、分页规范、接口基类等。
如此,可以利用框架的能力,对接口进行统一处理。比如,基于AOP等做额外的事情。
2.统一
统一基类,不论是对象基类,还是接口基类,就好比每个程序员的交互语言得到了统一,就好比工程师文化的统一,降低大家的沟通成本。
比如,后端定义了统一的返回体,前端使用接口时候就能标准化处理;定义了统一的异常基类,也便于统一的进行异常处理。
总之,统一规范,也是为了增强框架的统一处理能力。二者相辅相成。