更新记录
v1.5.36
- feat: 支持 Fastjson2
- fix: okhttp 后端
response.getContentLength()
取不到值 (#I90MUX (opens new window)) - fix: Jackson转换器中Lazy转换Map出错
- Update: solon 升级为
v2.6.5
- refactor: 不在生成 multipart boundary 字符串时使用 okio 包的方法
v1.5.35
- feat: 后端客户端实例缓存可配置大小以及过期时间
v1.5.34
- fix: 当请求不同的域名很多时,内存消耗越来越大 (#I8J5PN (opens new window))
- fix: 高并发环境下,监控runningPoolSize值,出现负值情况&且有时候所有请求都结束了,但值没有归零 (#I8JNBU (opens new window))
- fix:完善单元测试之修复声明式接口,
@BaseRequest
或@BaseURL
,在有baseURL属性下,如果方法的完整URL不写端口,就会被baseURL属性的端口覆盖,并不是默认的80端口的bug - fix: 修复不管是是用
@Address
还是@BaseRequest
都无法将baseUrl和@Get()
中的url拼接在一起的bug (#I7CAYS (opens new window)) - fix: 处理
@addrees
注解中basePath已/
结尾,方法url不以/
开头,最终地址会出现//
的bug。 - fix: MultipartRequestBody 类冲突 (154 (opens new window))
- refactor: 将gson改为单例
- refactor: 去掉
@DownloadFile
注解在下载文件时的进度日志 - refactor: 将 forest-spring-boot3 的相关测试用例移动到 forest-test 下
v1.5.33
- feat: 支持socks代理 (#I6MLMD (opens new window))
- feat: 组合注解支持属性重写
- fix:
@Body
注解的数组参数无法正常解析为JSON数组 (#I7UPBR (opens new window)) - fix: Content-Type为
application/xml
的情况下,发送byte数组数据错误 (#I7F3F0 (opens new window)) - fix:
@JSONBody Collection<String> codes
报错 (#I7QLTS (opens new window)) - add:
@SocksProxy
注解 - add:
@OverrideAttribute
注解 - opt: 优化URL更新方式
- update: forest-solon-plugin 升级 solon 为
2.4.0
v1.5.32
- fix: 在
@Header
参数中传入 Lazy Lambda 出错 (#I7EIAB (opens new window)) - fix: URLEncoder 无法编码百分号字符 (134 (opens new window))
- opt: 异步线程池初始化时并发优化
v1.5.31
- feat: 所有 Forest 请求默认带上
User-Agent: forest/{version}
的请求头 - fix: maven中各模块的JDK版本控制
- fix: 不同 ForestConfiguration 产生的 Client 实例存在参数污染的情况
- fix: 当
@Address
注解的 schema 属性设置为 https 时报错 (#I6Y6E2 (opens new window)) - fix: ReflectUtils.getFields非线程安全 (#I6W9TF (opens new window))
- opt: ForestMethod 使用懒加载的方式初始化
- refactor: 使用 revision 进行多模块版本管理
- refactor: 请求注解的 interceptor 属性只接受继承自 Interceptor 接口的类
- add:
Forest.VERSION
字段,可动态获取 Forest 版本号
v1.5.30
- feat: 适配 springboot3
- feat: 适配 solon
- feat: 延迟参数 (Lambda参数),支持 Query, Header,Body 三种参数的延迟求值
- feat: 可自定义异步请求池拒绝策略
- feat: 请求体序列化接口,ForestRequest.body().encode() 和 ForestRequest.body().encodeToString()
- fix: ForestProxy添加header没有效果 ForestProxy添加header没有效果 (#I63WWN (opens new window))
- fix: onBodyEncode 生命周期顺序问题
- fix: 不同 ForestConfiguration 对象共用同一个异步线程池的问题
- fix: 无法解析 localhost:8080 这类省略 http:// 的 url
- reflector: 将xml解析模块拆分成了 forest-jaxb 和 forest-jakarta-xml 两个子模块,需要的情况要分别自行引入
- reflector: request body encoder
- refactor: Forest Body clone
- refactor: 构建 Query String 部分
- add: HTTPRoxy 注解的 headers 属性
- add: forest 示例工程
v1.5.28
- feat: 拦截器新增 onBodyEncode 回调函数 (#I4WF5Q (opens new window))
- feat: 隐式转换带 BasicAuth 认证信息的请求 (#I62BTW (opens new window))
- feat: 声明式接口可返回
ForestFuture<T>
类型 - fix: 下载文件,从URL中取得文件名时前后双引号的问题 (#I61NPK (opens new window))
- fix: 参数为空,导致空指针问题 (#110 (opens new window))
- fix: @HttpClient 和 @okhttp 注解在 1.5.27 失效的问题
- fix: SpringSSLKeyStore构造方法缺少参数导致SpringBoot项目启动失败
- fix: Null Pointer Error 当指定RetryWhen (#I5WEBC (opens new window))
- fix: @BaseRequest里的 connectTimeout和readTimeout没效果 (#I5WC6U (opens new window))
- fix: 接口上@Address注解的basePath设置为完整URL时,request.basePath() 结果不正确
v1.5.27
- feat: 异步API增强, 支持 Async/Await 风格 (#I60IAL (opens new window))
- feat: 响应API增强, 后验数据转换 (#I60IDO (opens new window))
- feat: kotlin协程
- feat: 请求可中断取消执行 (#I60I90 (opens new window))
- fix: ForestHeaderMap.addCookie时可能会存在无法进入header的问题 (#100 (opens new window))
- fix: 发送 multipart/form-data 请求时,@Body参数为空会报错 (#I5Y7WJ (opens new window))
- fix: 未设置 charset 时,调用 ForestRequest.getQueryString() 报错 (#I5RGX4 (opens new window))
- fix: ForestRequest.getBasePath() 无法获取 AddressSource 中定义的 basePath (#I5RGOY (opens new window))
- fix: x-www-form-urlencoded 格式请求 Body 在 URLEncode 时忽略 #
- fix: 在重试的时候没有关闭上一次的请求响应
v1.5.26
- feat: 在使用 OkHttp3 后端情况下,允许Query参数不转义大括号 (#I5ITW9 (opens new window))
- feat: 在使用 OkHttp3 时绕过空 Multipart 错误 (#I5I1AC (opens new window))
- fix: 默认自动绕过SSL验证
- fix: 声明的接口返回类型如果是String(或其他Charsequencel类型)导致自定义converter (#I5L2P6 (opens new window))
- fix: okhttp后端自动将charset=UTF-8转成了小写 (#I5L4AS (opens new window))
- fix: url域名信息参数赋值会自动参数后添加”/“符号路径导致错误 (#I5I62P (opens new window))
- fix: URL路径中的$字符会被转义
- fix: 请求的ForestURL的ssl属性没有继承类里@BaseRequest的ssl信息 (#I5HXHX (opens new window))
- update: 更新 spring 版本到
5.3.19
- update: 更新 spring boot 版本到
2.6.7
v1.5.25
- fix: 匹配验证secure cookie
- fix: cookie携带请求不成功 (#I5F8IY (opens new window))
- fix: OKHTTP 连接泄漏问题 (#I5E613 (opens new window))
- fix: forest 支持springboot 1.5.14.realese 启动失败 (#I5FDBG (opens new window))
- fix: 传的参数带有+号,但是服务接收时,获取的参数值中+号全部变成空格了 (#I5EG9L (opens new window))
- add: OkHttp3Cookie
- add: HttpclientCookie
- update: 更新jackson版本到2.13.3
- update: 更新jackson-databind版本到2.13.3
- update: 更新jackson-annotations版本到2.13.3
- update: 更新gson版本到2.8.9
- update: 更新fastjson版本到1.2.83
v1.5.24
- fix: OKHTTP 连接泄漏问题 (#I5E613 (opens new window))
- fix: 遇到无法解析的Cookie时会报空指针 (#I5E27R (opens new window))
v1.5.23
- feat: 快速接口支持快速下载文件
- feat: 可配置注入OkHttpClient和HttpClient对象 (#I5CWAL (opens new window))
- feat: 可配置接口的后端Client对象是否缓存 (#I5D818 (opens new window))
- fix: springboot配置binary转换器初始化失败 (#I5D07S (opens new window))
- fix: ForestResponse.statusIs(xxx)会出现空指针 (#I5CWQL (opens new window))
- fix: 在@Address注解的basePath中写的端口号会失效 (#I5CR15 (opens new window))
- fix: 使用@HTTPProxy注解对https请求设置http代理后出现java.lang.IllegalArgumentException:Socket may not be null
- fix: 在不设置ContentType和BodyType的情况下无法正常发送请求 (#I5CML4 (opens new window))
- fix: ForestRequest.addBody(List) 循环中只执行一次
- refactor: 重构Cookie (#I5C26U (opens new window))
- refactor: 重构OkHttpClient
- add: 添加拦截器到请求中方法ForestRequest#addInterceptor(Class<? extends Interceptor>)
- add: HttpClientFactory
- add: OkHttpClientFactory
v1.5.22
- feat: 统一连接池 (#I5APJA (opens new window))
- feat: 可配置异步请求线程池队列大小 (#I5B78X (opens new window))
- feat: 支持通过参数定义返回类型 (#I5ANZL (opens new window))
- fix: spring 5.1 以下的低版本启动失败
- fix: 请求地址中包含#字符会被转义导致资源找不到 (#I59O7M (opens new window))
- fix: 配置BaseRequest的baseURL属性后,完整请求路径中的默认端口号会被覆盖,导致请求失败 (#I4YBDV (opens new window))
- fix: 解决当@body注解在对象上标识以后,char&Character类型的属性无法从客户端传输至服务端问题
- fix: kotlin项目启动异常 (#I50PDZ (opens new window))
- fix: RetryWhen重试条件接口在最后一次重试后会执行两次 (#I599BT (opens new window))
- update: #I5ANZR 删除单元测试代码中的Log4j2依赖
v1.5.21
- feat: 字符串模板支持手动URLEncode (#I58D1C (opens new window))
- fix: url在某些场景下的解析错误 (#I56XDM (opens new window))
v1.5.20
- feat: 支持JDK17,兼容从8、11到17所有JDK版本
- fix: BaseRequest 设置connectTimeout和readTimeout没效果 (#I4Z8Y0 (opens new window))
- fix: 下载,内存溢出 (#I4NFPE (opens new window))
- fix: AddressSource 里面配置 basePath 不生效 (#I50LVA (opens new window))
v1.5.19
- fix: 在原生Spring环境中,拦截器无法注入Spring上下文 (#I4UE9T (opens new window))
- fix: httpclient后端的https连接池并发时数据会串 (#I4TYJ1 (opens new window))
- fix: 响应头两个 Set-Cookie 的时候只能取到最后一个 (#I4TATV (opens new window))
- refactor: 去掉 commons-logging 包的依赖
v1.5.17
- feat: 动态正向代理来源信息 (#I4SYM1 (opens new window))
- fix: 异常:The file of SSL KeyStore is empty (#I4SYGB (opens new window))
- fix: maxRetryInterval配置失效 (#I4SV2P (opens new window))
- fix: 主项目没有依赖lang3会报错的问题 (#I4M9DE (opens new window))
- fix: 组合注解未生效 (#I4N2HC (opens new window))
- refactor: 去掉 NameUtils 工具类中重复的if分支
v1.5.16
- feat: 自定义 hostnameVerifier 和 SSLSocketFactoryBuilder (#I4LGW8 (opens new window))
- feat: 根据Response的Content-Encoding自动识别是否为gzip压缩数据,并自动解压
- fix: 重定向后URL的Query参数会重复增加 (#I4LPGU (opens new window))
- fix: 修复content-encoding导致的字符编码转换异常 (#I4LJ3X (opens new window))
- fix: 修复字符编码判断的BUG
- add: @SSLHostnameVerifier 注解
- add: @SSLSocketFactoryBuilder 注解
v1.5.14
- feat: 支持设置异步请求的线程池大小 (#I4JXN3 (opens new window))
- feat: ForestBody对象添加获取所有键值对的方法(包括对象Body项) (#I4JDRR (opens new window))
- fix: URL中包含@,会去掉@ (#I4J3LU (opens new window))
- add: AsyncAbortPolicy类
- add: ForestBody.nameValuesMapWithObject
v1.5.13
- feat: 指定请求体类型的@BodyType注解 (#I4IF3N (opens new window))
- feat: 新增获取全部请求体中键值对参数的方法 (#I4GWO7 (opens new window))
- fix: 在请求中设置自定义Encoder无效 (#I4HNZF (opens new window))
- fix: url解析问题,如果包含@符@会去掉 (#I4GQWW (opens new window))
- add: BodyType注解
- add: FastjsonEncoder注解
- add: GsonEncoder注解
- add: JacksonEncoder注解
- delete: com.dtflys.forest.http.ForestBodyType类
- update:
ForestRequest
类的setBodyType
方法和bodyType
方法的参数类型改为ForestDataType
v1.5.12
- feat: getbody可以有key-value形式进行取值 (#I4FUSB (opens new window))
- fix: URL参数会重复Encode (#I4FDJC (opens new window))
- fix: {变量名}格式字符串模板在引用隐式变量时出错 (#I4EP04 (opens new window))
- fix: 对于http://localhost/xxx:yyy这种形式的URL解析错误 (#I4GC5M (opens new window))
- fix: httpclient和okhttp编码行为不一致 (#I4FRR5 (opens new window))
- fix: post请求的url为空的时候有bug (#I4F3XS (opens new window))
- fix: retrywhen中的异常被吃掉, 无法抛出. 且异常后仅触发一次重试 (#I4E4X7 (opens new window))
- fix: Httpclient后端在连续异步发送请求后会出现I/IO报错 (#I47FD7 (opens new window))
- optimize: Forest对于一些错误的响应处理不友好 (#I4EIDJ (opens new window))
- refactor: 重构后端代码: 表单类型Body部分
- refactor: 重构后端: okhttp3
- refactor: 重构后端: httpclient
- refactor: 重构后端: 重写异步请求逻辑
- add: ForestBody类
- add: Validations类
- delete: OkHttp3不再使用的请求执行器类
v1.5.11
- fix: connect-timeout配置在springboot 1.x 版本下无法解析 (#I4ECR3 (opens new window))
- optimize: 增强字符串模板报错信息 (#I4EC9V (opens new window))
v1.5.10
- fix: 重新URL解析后,引起的空指针问题
v1.5.9
- fix: URI路径的URLEncoder编码结果不正确 (#I4DUFG (opens new window))
v1.5.8
- fix: 使用
@DownloadFile
下载文件时,在某些环境下会发送阻塞 (#I4DLBI (opens new window))
v1.5.7
- fix: response对google protobuf包依赖 (#I4DKQW (opens new window))
v1.5.6
- feat: 将timeout细化为connectTimeout和readTimeout (#I4DH21 (opens new window))
- fix: Google Protobuf包依赖错误 (#I4DDZY (opens new window))
- fix: 配置forest.connect-timeout不生效 (#I45298 (opens new window))
v1.5.5
- feat: 支持每个请求都可自定义序列化转换器 (#I4CLV8 (opens new window))
- feat: 二进制类型请求体 (#I4D4GY (opens new window))
- feat: Protobuf请求体 (#I4D4JT (opens new window))
- feat: 转换器对应包依赖 需要时获取 (#I29XE0 (opens new window))
- fix: getAttribute方法在多线程情况下取值会串 (#I4D5KS (opens new window))
- fix: 在onRetry方法中,调用 addQuery 或 addBody 能API无效 (#I4CZS5 (opens new window))
- add:
@OkHttp3
注解 - add:
@HttpClient
注解 - add: ForestRequest.type(ForestRequestType type) 方法
- add: ForestLogHandler.logContent(String content) 方法
v1.5.4
- fix: 依赖Guava包 (#I4CC9B (opens new window))
- fix:
@Query
注解修饰Map参数时,Map中的列表属性无法正常序列化 (#I4C8UC (opens new window)) - fix: 多线程下的并发问题
- update: 去掉多余的DEBUG日志
- add: ForestLogHandler.logContent(String content) 方法
- add: ForestRequest.addQuery(String name, Collection collection) 方法
- add: ForestRequest.addQuery(String name, Object... array) 方法
- add: ForestRequest.addArrayQuery(String name, Collection collection) 方法
- add: ForestRequest.addArrayQuery(String name, Object... array) 方法
v1.5.3
- feat: Forest快捷接口 (#I4893Q (opens new window))
- feat: 支持全局变量动态绑定方法 (#I478N2 (opens new window))
- feat: 支持引用properties的字符串模板 (#I3P1QK (opens new window))
- feat: 支持获取响应原因短语,即响应状态文本 (#I4BJVF (opens new window))
- feat: 自定义组合注解 (#I4BISF (opens new window))
- feat: 可自定义请求是否成功的条件 (#I4AEMT (opens new window))
- feat: 可动态设置主机地址和端口号 (#I4AEJ8 (opens new window))
- feat: 自定义重试条件 (#I493N3 (opens new window))
- feat: 新增 OnRetry 回调函数 (#I493N6 (opens new window))
- feat: 新增
@Headers
注解 (#I4BJQ6 (opens new window)) - feat: Forest请求接口继承规则 (#I4B0N7 (opens new window))
- feat: 自动重定向控制 (#I4B0FM (opens new window))
- feat: 全局变量支持动态绑定方法 (#I478N2 (opens new window))
- feat: 在请求日志中显示后端框架名称 (#I4AKTD (opens new window))
- feat: 新建forest-mock子项目 (#I468JB (opens new window))
- fix: POST请求中,空Map无法转成{} JSON字符串 (#I455O2 (opens new window))
- fix: 过滤器参数总是为第一个参数 (#I43VV0 (opens new window))
- fix: 自定义请求头content-type会替换为大写 (#I46WNW (opens new window))
- fix: 在Spring项目中如果不配置转换器就会找不到Converter (#I46FKV (opens new window))
- fix: Response不带Content-Type和Content-Encoding头时无法正常解析 (#I455PO (opens new window))
- fix: 当请求 302 请求时,Forest 会自动的访问重定向的url,导致 302 的响应头拿不到 (#I4AF3B (opens new window))
- fix: SpringSSLKeyStore 在Spring中初始化失败
- fix: 配置有ForestConfiguration参数的转换器的时候,在springboot中会初始化失败 (#I4AKT3 (opens new window))
- fix: 在多线程环境下使用上传文件接口,运行时间长后会报出堆栈溢出的错误 (#I37UGY (opens new window))
- fix: BeanPostProcessor 接口在低版本 springboot 环境下不兼容
- opt: 优化 StringUtils 工具类方法
- opt: 优化 URLUtils 工具类方法
- add: SpringForestProperties类
- add: 在所有请求注解中(如
@Request
,@Get
)添加 responseEncoding 属性,用于强制指定响应数据的编码格式 - add: SpringForestObjectFactory类
- add: ForestResponse.isRedirection 方法
- add: ForestResponse.getRedirectionLocation 方法
- add: ForestResponse.redirectionRequest 方法
- add: ForestHeaderMap.clone 方法
- add: ForestQueryMap.clone 方法
- refactor: retryCount属性不在建议使用
- update: 去掉MethodLifeCycle
- refactor: 修改Forest接口扫描逻辑
- refactor: 将 TypeReference 类改为抽象类
v1.5.1
- feat: 添加@URLEncode注解 (#I3SR0L (opens new window))
- feat: 新增强制UrlEncoded的字符串模板 (#I3P1R0 (opens new window))
- feat: 支持对gzip格式返回数据进行解压 (#I3SUSL (opens new window))
- feat: spring项目通过定义Bean自动从Spring上下文中注入对应的ForestConverter (#I3E63M (opens new window))
- fix: 在JSON或XML转换失败后,没有直接报错,而是转成了字符串 (#I3IUKC (opens new window))
- fix: 在GET请求时带有空的body实体 (#I3RBR2 (opens new window))
- fix: 去掉protobuf decoder 根据返回类型序列化
- fix: 代理 (#I3E1MF (opens new window))
- fix: 遇到非application/json的Response Header无法正常解析JSON (#I3AJSD (opens new window))
- fix: 调用configuration.getLogHandler().setLogger()方法无效 (#I3IUKD (opens new window))
- fix: okhttp后端情况下,response返回gzip或deflate压缩数据解析乱码 (#I3A54I (opens new window))
- fix: 单向SSL不填protocol时报空指针
- fix: statusCode空指针
- fix: status在非网络错误情况下为404
- fix: 修改方法名拼写错误 getDateType -> getDataType
- update: 修改gson版本 -> 2.8.6
- refactor: 指定统一的spring-boot版本
- update: 去掉QLExpress
- add: @URLEncode注解
- add: URLEncodeLifeCycle类
v1.5.0
- feat: 支持application/octet-stream等二进制请求方式 (#I3B3UZ (opens new window))
- feat: 变量未定义时,报错给予更友好的提示 (#I3DOAP (opens new window))
- feat: 添加@Var注解,作为@DataVariable注解的简化快捷版本 (#I3E0FD (opens new window))
- fix: ForestResponse<File>作为返回值使用@DownloadFile注解进行下载后getResult()为空(#I3DAEQ (opens new window))
- add: ForestConfiguration#isVariableDefined方法
- add: @Var注解
- add: ResourceRequestBody类
- add: ResourceRequestBodyBuilder类
- add: MultipartRequestBody类
- add: MultipartRequestBodyBuilder类
- add: SupportFormUrlEncoded类
- refactor: 将DataVariableLifeCycle改名为VariableLifeCycle
- refactor: Body的解析方式改为构建器模式
- refactor: ForestVariableUndefined.java 改名为 ForestVariableUndefinedException
- update: 更新Spring-Core和Spring-Webmvc版本
- update: 更新JUnit版本
v1.5.0-RC7
- fix: 反序列化XML为泛型类对象时报错 (#I3B5VH (opens new window))
- fix: 全局配置的log-handler不起作用 (#I3B49O (opens new window))
v1.5.0-RC6
- feat: @LogHandler 和 @LogEnabled 注解作用域添加 ElementType.TYPE级别(#I3AHLC (opens new window))
- feat: Query参数可以选择是否urlencoded
- fix: 遇到非application/json的Response Header无法正常解析JSON (#I3AJSD (opens new window))
- fix: 多模块开发多个@ForestScan注解只能扫描到其中一个注解的basePackages
- fix: 基本类型判断漏掉了boolean
- refactor: 将 gourpid 'spring-boot-starter-forest' 改为 'forest-spring-boot-starter'
- refactor: 将 spring-boot-starter-forest 模块改名为 forest-spring-boot-starter
- refactor: 将forest-spring-boot-starter模块下的包名修改为 'com.dtflys.forest.springboot'
v1.5.0-RC5
- feat: 可以从ForestResponse对象获取请求总耗时 (#I39O55 (opens new window))
- fix: LogEnabled注解的logResponseContent在请求失败的情况下无效 (#I39M2G (opens new window))
- add: ForestResponse.requestTime属性
- add: ForestResponse.responseTime属性
- add: ForestResponse.getTimeAsMillisecond方法
v1.5.0-RC4
- fix: 请求不能设置proxy用户名和密码 (#I36SJ8 (opens new window))
- fix: https的url字符串会自动去掉 :80 端口部分 (#I38KEJ (opens new window))
v1.5.0-RC3
- fix: 全局配置重试次数,对
[Forest] [Network Error]: Read timed out
错误无效 (#I34X5D (opens new window)) - fix: URL井号(#)后面字符串没有encoding
- fix: httpclient后端处理Cookie时产生'Invalid cookie header'的问题
- refactor: 实现Interceptor接口时,不必强制实现onSuccess方法和onError方法
v1.5.0-RC2
- feat: 支持负数的字符串模板下标引用 (#I2BF4N (opens new window))
- feat: @Query, @Body, @Header注解支持defaultValue默认值属性
- fix: Fastjson使用JSONField注解的format属性设置日期格式没起效果 (#I29BFM (opens new window))
- refactor: 去掉多余的System.out.println命令行输出
- refactor: forest在spring的xml配置部分
- add: @Query, @Body, @Header注解的defaultValue属性
- add: jsr305依赖
- add: ForestRequest.methodReturn方法和ForestRequest.getMethodReturnValue方法
- update: 将错误拼写的方法名 handleSyncWicthException 改为 handleSyncWithException
v1.5.0-RC1
- feat: 处理Cookie (#I1QR18 (opens new window))
- feat: 通过@FormBody注解将参数标识为表单格式的请求体 (#I28MY5 (opens new window))
- feat: @Request、@Get、@Post等请求注解支持增加value属性作为url属性的别名 (#I28FWM (opens new window))
- feat: 可以将Response返回的"true", "false"字符串转换成Boolean返回类型 (#I281O0 (opens new window))
- fix: 用httpclient的方式上传文件会不成功,但用okhttp就是成功的 (#I28SA1 (opens new window))
- fix: 遇到一些自定义的Response Content-Type,无法正常读取响应内容 (#I28PL7 (opens new window))
- add: ForestCookies类
- add: ForestCookie类
- add: OnLoadCookie接口
- add: OnSaveCookie接口
帮助我们改善此文档 (opens new window)
上次更新: 2024/02/27, 12:43:35