功能介绍
封装全局的常量或枚举、自定义业务异常以及统一数据返回封装体
目录结构
- base 包下 ExceptionBase 为所有业务异常枚举的父接口类,ResultResponse 为全局统一返回数据的封装体;
- constants 包下即一些全局常量或枚举定义;
- exception 包下 FatCatException 即为封装的自定义业务异常。
代码展示
全局数据统一返回体 ResultResponse
@Data
@NoArgsConstructor
public class ResultResponse implements Serializable {
private static final long serialVersionUID = 5859098504073316951L;
/** * 响应编码 */
private int code;
/** * 数据补充说明 */
private String message;
/** * 数据实体 */
private Object data;
/** * 当前请求数据是否成功;异常或错误均设置为false */
private Boolean success;
/** * 注意当前构造函数属于私有方法,防止不规范的编码和数据传递 */
private ResultResponse(int code, String message, Object data, Boolean success) {
this.code = code;
this.message = message;
this.data = data;
this.success = success;
}
/** * 返回成功时 */
public static ResultResponse success(Object data) {
return new ResultResponse(ExceptionEnum.SUCCESS.code(), ExceptionEnum.SUCCESS.message(), data, Boolean.TRUE);
}
/** * 返回失败时 */
public static ResultResponse failure(FatCatException ex) {
return new ResultResponse(ex.getCode(), ex.getMessage(), null, Boolean.FALSE);
} // 其他静态方法
}
全局自定义业务异常
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class FatCatException extends RuntimeException {
private static final long serialVersionUID = -7056527073546705020L;
/** * 响应编码 */
private int code;
/** * 数据补充说明 */
private String message;
/** * 仅一个接收指定枚举类的构造,防止不规范的参数传递 */
public FatCatException(ExceptionBase ex) {
this.code = ex.code();
this.message = ex.message();
}
}
常用依赖
常用工具依赖
<properties>
<hutool.version>5.6.2</hutool.version>
<lombok.version>1.18.12</lombok.version>
<fastjson.version>1.2.76</fastjson.version>
<mapstruct.version>1.4.2.Final</mapstruct.version>
</properties>
<dependencies>
<!-- hutool 工具 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<!-- 常用注解依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!-- fastjson 弥补 hutool 的 json 转换 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!-- 对象属性复制工具 -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</dependency>
</dependencies>
补充说明
- hutool 工具已经包含了 json 数据的转换,为什么还要引入 fastjson ?
- 答: hutool 使用的是 jackson 的序列化和反序列化,针对时间类型的数据会转换成时间戳,fastjson 对时间类型的转换会转换成字符串;其实只要保证序列化和反序列化一致即可
- hutool 包中已经有了 BeanUtil 属性复制工具,为什么还要引入 mapstruct ?
- 答: BeanUtil 使用的是反射读写数据,mapstruct 是在编译阶段调用对象的 getter/setter 方法生成对应的复制方法,性能后者更优;能不用反射就不要用反射