了解ApiExtra参数【重要】

>w **easyapi**在生成接口文档时依次是->扫描控制器->扫描控制器下的接口->扫描接口方法->解析方法参数。在这整个过程中,**easyapi会将自己扫描和解析到的类、方法、参数以及他们的源码放在ApiExtra对象中**,以供拦截器使用。举个例子,你可以在解析某个参数对象字段的时候通过ApiExtra对象来确定当前是在解析哪个控制器下的哪个接口中的参数,让我们一起来了解一下**ApiExtra**对象属性吧 ```java public class ApiExtra { //控制器类 private Class controllerClass; //控制器源码信息 private ClassComment controllerComment; //数据库存储的控制器信息 private DBModuleControllerEntity dbController; //接口方法 private Method method; //接口源码信息 private MethodComment methodComment; //数据库存储的接口信息 private DBModuleInterfaceEntity dbInterface; //参数类 private Parameter parameter; //返回参数 private Type returnType; //当前解析的参数类型 private Class modelClass; //类注释 private ClassComment modelComment; //当前解析的参数字段 private Field modelField; //字段源码信息 private FieldComment fieldComment; } ``` ```java public class DBModuleControllerEntity extends BaseDbEntity { @ApidocComment("所属模块id") private Long moduleId; @ApidocComment("控制器全类名") private String className; @ApidocComment("控制器名称") private String showName; @ApidocComment("控制器说明") private String description; @ApidocComment("控制器作者") private String author; @ApidocComment("控制器名称拼音") private String pinyin; @ApidocComment("统一请求的父路径") private String apiPath; @ApidocComment("排序值,值越小,排名越靠前") private Integer sort = 0; @ApidocComment("源代码") private String source; @ApidocComment("搜索字段") private String searchTags; @ApidocComment("是否展示 0-否 1-是") private Integer show; } ``` ```java public class DBModuleInterfaceEntity extends BaseDbEntity { @ApidocComment("模块id") private Long moduleId; @ApidocComment("控制器id") private Long controllerId; @ApidocComment("作者") private String autor; @ApidocComment("是否展示 0-否 1-是") private Integer show; @ApidocComment("控制器名称") private String controllerClass; @ApidocComment("接口方法名") private String methodName; @ApidocComment("接口唯一标识") private String unique; @ApidocComment("接口版本 0-最新版本 1-待更新") private Integer upgradeStatus; @ApidocComment("更新策略: 0-覆盖更新 1-增量更新 2-跳过更新") private Integer renewType; @ApidocComment("接口标题") private String showName; @ApidocComment("接口标题拼音") private String pinyin; @ApidocComment("接口说明") private String description; @ApidocComment("请求地址") private String requestUrl; @ApidocComment("请求方式 0-全部 1-get 2-post ") private Integer requestMethod; @ApidocComment("请求体类型 0-form 1-json体 2-文件上传 3-XML 4-RAW") private Integer bodyType; @ApidocComment("排序值") private Integer sort = 0; @ApidocComment("源代码") private String source; @ApidocComment("搜索字段") private String searchTags; @ApidocComment("快搜标签") private String customTags; @ApidocComment("是否开启请求参数外包装 0-不是 1-是") private Integer enableReqPackage; @ApidocComment("是否开启返回参数外包装 0-不是 1-是") private Integer enableResPackage; @ApidocComment("原始数据,用来判断是否被改变的") private String origin; } ``` ```java public class JavaSourceComment { /** * 名称 */ private String name; /** * 处理过后的注释 */ private String comment; /** * 详细注释,根据@符号进行拆分 */ private List<CommentDetail> commentDetails; /** * 最开始的原始注释 */ private String commentOriginal; /** * 访问属性(public、private。。。) */ private String modifyers; /** * 源码片段 */ private String source; /** * 每行源码内容 */ private List<String> lines; /** * 注解信息 */ private List<AnnotationComment> annotations = new ArrayList<>(); } ``` #### Comment : 为源码数据,在ApiExtra对象中凡是*Comment的参数均为源码参数,参数中都包含下列信息 > -->**name** : `类名称` -->**modifyers** : `访问权限,例如private、public等` -->**source** : `未处理的源码` -->**lines** : `将源码按行切割并组成的集合` -->**comment** : `处理后的类注释` -->**commentOriginal** : `源码注释` -->**commentDetails** : `详细注释,解析包含@的key和val` -->-->**key** : `注释的key,比如@author 小明,解析后的key为author` -->-->**value** : `注释的val,比如@author 小明,解析后的value为小明` -->**annotations** : `类注解源码集合` -->-->**annotationName** : `注解名称` -->-->**annotationComment** : `注解注释` -->-->**annotationSource** : `注解源码` -->-->**pairs** : `注解参数源码集合` -->-->-->**name** : `注解参数名称` -->-->-->**value** : `注解参数值` -->**extendsClassName** : `继承类的类名` -->**implClassNames** : `实现的接口类名` -->**packageName** : `包名` -->**fields** : `类属性字段集合,内部包含以上全部属性` -->**methods** : `类方法集合,内部包含以上全部属性,同时拥有特殊属性` -->-->**parameters** : `方法参数源码集合,包含以上全部属性` -->-->**returnType** : `方法返回值类型源码` -->-->**returnComment** : `方法返回注释` ### ApiExtra : 对象属性 > **controllerClass** : `当前解析链操作的控制器类` **controllerComment** : `源码数据,控制器源码解析类` **method** : `当前解析链操作的接口方法` **methodComment** :`源码数据,接口源码解析类` **parameter** : `当前解析链操作的方法参数` **returnType** : `当前解析链操作的方法返回值类型` **modelClass** : `当前解析链操作的参数实体类` **modelComment** :`源码数据,实体参数解析类` **modelField** : `当前解析链操作的参数实体属性` **fieldComment** : `源码数据,实体参数属性解析类` **dbController** : `easyapi存储的控制器实体,DBModuleControllerEntity 类型` **dbInterface** : `easyapi存储的接口实体,DBModuleInterfaceEntity 类型`