Verity概念解析与Spring Boot验证模块实战指南
最近在开发一个需要验证用户输入的场景时发现很多开发者对verity这个单词感到困惑。它看起来像verify但又不太一样网上资料也多是零散的讨论。其实verity在技术领域尤其是在一些框架、库或特定上下文中有着明确的含义和应用。本文将系统梳理verity的概念、常见技术应用场景并通过一个完整的实战案例展示如何在项目中实现一个基于“验证”逻辑的核心功能模块。无论你是刚接触这个概念的新手还是想深入了解其工程实践的开发者都能从中获得可直接复用的代码和清晰的配置思路。1. 背景与核心概念Verity 是什么在英语中verity一词的本意是“真实性”或“真理”。然而在软件开发和技术文档的特定语境下它常常作为verify验证的名词形式或一个特定组件的名称出现其核心内涵始终围绕“验证”这一动作及其结果的“真实性”。我们可以从几个层面来理解作为通用概念它指代“验证”这个过程本身或验证后所确认的“真实状态”。例如在讨论数据完整性时我们可能会说“the verity of the data”数据的真实性。作为特定技术组件名在一些开源项目或内部系统中Verity可能被直接用作类名、服务名或模块名专门负责某项验证职责。比如一个UserCredentialVerity类可能专门用于校验用户凭证。与Verify的区分这是最容易混淆的点。简单来说verify是动词强调“执行验证”这个动作而verity通常是名词强调“验证的真实性结果”或“验证实体本身”。在代码中你调用一个verify()方法而该方法可能属于一个VerityService。为什么开发者需要关注它在构建健壮、安全的系统时验证Verification是无处不在的用户输入验证、权限验证、数据一致性验证、业务规则验证等。明确verity相关的概念能帮助我们在设计系统架构、命名组件和编写代码时更加清晰、准确。特别是在阅读一些国外框架源码或技术文章时能准确理解其设计意图。2. 环境准备与版本说明为了演示如何构建一个典型的“验证”模块我们将创建一个简单的 Spring Boot 应用。这个案例将模拟用户注册场景我们需要验证用户名、邮箱和密码。环境与版本说明操作系统Windows 10 / macOS / Linux (本文命令以 macOS/Linux 为例Windows 用户请使用 PowerShell 或 WSL)Java 开发工具包 (JDK)17 或更高版本 (推荐 OpenJDK 17)构建工具Apache Maven 3.6.3集成开发环境 (IDE)IntelliJ IDEA, VS Code 或 Eclipse项目框架Spring Boot 3.1.x依赖管理Maven版本兼容性提示 Spring Boot 3.x 要求 JDK 17 及以上。如果你使用的是 JDK 8 或 11需要将 Spring Boot 版本调整为 2.7.x。本文示例基于 Spring Boot 3.1.5 编写核心逻辑在不同版本间是通用的重点是理解验证模式的实现。3. 核心原理与设计模式拆解在实现验证逻辑时我们通常会采用一些设计模式来保证代码的清晰、可扩展和可维护。下面介绍两种最常用的模式。3.1 验证器 (Validator) 模式这是最直观的模式。我们定义一个Validator接口然后为不同的验证规则创建具体的实现类。1. 接口定义// 文件路径src/main/java/com/example/demo/verity/validator/Validator.java public interface ValidatorT { /** * 验证目标对象 * param target 待验证的对象 * return 验证结果 */ VerificationResult validate(T target); }2. 验证结果封装我们需要一个对象来承载验证结果包括是否成功、错误信息等。// 文件路径src/main/java/com/example/demo/verity/result/VerificationResult.java import lombok.Data; import java.util.ArrayList; import java.util.List; Data public class VerificationResult { private boolean valid; private ListString errorMessages; public VerificationResult() { this.valid true; this.errorMessages new ArrayList(); } public void addError(String message) { this.valid false; this.errorMessages.add(message); } public static VerificationResult success() { return new VerificationResult(); } public static VerificationResult failure(String... messages) { VerificationResult result new VerificationResult(); for (String msg : messages) { result.addError(msg); } return result; } }3. 具体验证器示例用户名验证// 文件路径src/main/java/com/example/demo/verity/validator/impl/UsernameValidator.java import com.example.demo.verity.validator.Validator; import org.springframework.util.StringUtils; public class UsernameValidator implements ValidatorString { Override public VerificationResult validate(String username) { VerificationResult result new VerificationResult(); if (!StringUtils.hasText(username)) { result.addError(用户名不能为空); } else if (username.length() 4 || username.length() 20) { result.addError(用户名长度必须在4到20个字符之间); } else if (!username.matches(^[a-zA-Z0-9_]$)) { result.addError(用户名只能包含字母、数字和下划线); } // 可以添加更多规则如检查是否已存在 return result; } }为什么这样做将每种验证规则独立成类符合“单一职责原则”。当需要修改用户名规则时只需改动UsernameValidator不会影响邮箱或密码的验证逻辑。它也便于单元测试。3.2 门面 (Facade) 或服务层整合单个验证器很好但实际业务中我们往往需要对一个对象进行多重、顺序的验证。这时我们可以创建一个“验证服务”Verity Service作为门面统一调度各个验证器。// 文件路径src/main/java/com/example/demo/verity/service/UserRegistrationVerityService.java import com.example.demo.verity.validator.Validator; import com.example.demo.verity.model.UserRegistrationRequest; import com.example.demo.verity.result.VerificationResult; import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.List; Service public class UserRegistrationVerityService { private final ListValidatorUserRegistrationRequest validators; // 通过构造器注入所有针对 UserRegistrationRequest 的验证器 public UserRegistrationVerityService( ValidatorUserRegistrationRequest usernameValidator, ValidatorUserRegistrationRequest emailValidator, ValidatorUserRegistrationRequest passwordValidator) { this.validators Arrays.asList(usernameValidator, emailValidator, passwordValidator); } /** * 执行全部验证 */ public VerificationResult verify(UserRegistrationRequest request) { VerificationResult finalResult new VerificationResult(); for (ValidatorUserRegistrationRequest validator : validators) { VerificationResult singleResult validator.validate(request); if (!singleResult.isValid()) { finalResult.getErrorMessages().addAll(singleResult.getErrorMessages()); } } // 如果收集到了任何错误信息则整体验证失败 finalResult.setValid(finalResult.getErrorMessages().isEmpty()); return finalResult; } }这个UserRegistrationVerityService就是我们对“Verity”概念的一个具体实现。它不关心具体验证细节只负责协调保证了业务逻辑的简洁。4. 完整实战案例用户注册验证模块现在我们将上述设计付诸实践构建一个完整的可运行示例。4.1 创建项目结构与依赖使用 Spring Initializr 创建一个新项目或直接在 IDE 中创建。主要依赖如下pom.xml 关键依赖?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.1.5/version relativePath/ /parent groupIdcom.example/groupId artifactIddemo-verity/artifactId version0.0.1-SNAPSHOT/version namedemo-verity/name descriptionDemo project for Verity/description properties java.version17/java.version /properties dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- 方便生成Getter/Setter -- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency !-- 测试 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency /dependencies build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId configuration excludes exclude groupIdorg.projectlombok/groupId artifactIdlombok/artifactId /exclude /excludes /configuration /plugin /plugins /build /project4.2 定义数据模型创建用户注册请求的模型类。// 文件路径src/main/java/com/example/demo/verity/model/UserRegistrationRequest.java import lombok.Data; Data public class UserRegistrationRequest { private String username; private String email; private String password; private String confirmPassword; }4.3 实现具体验证器我们需要实现之前定义的各个验证器。注意它们现在验证的是整个UserRegistrationRequest对象。1. 用户名验证器// 文件路径src/main/java/com/example/demo/verity/validator/impl/UsernameValidator.java import com.example.demo.verity.model.UserRegistrationRequest; import com.example.demo.verity.result.VerificationResult; import com.example.demo.verity.validator.Validator; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; Component public class UsernameValidator implements ValidatorUserRegistrationRequest { Override public VerificationResult validate(UserRegistrationRequest request) { VerificationResult result new VerificationResult(); String username request.getUsername(); if (!StringUtils.hasText(username)) { result.addError(用户名不能为空); } else if (username.length() 4 || username.length() 20) { result.addError(用户名长度必须在4到20个字符之间); } else if (!username.matches(^[a-zA-Z0-9_]$)) { result.addError(用户名只能包含字母、数字和下划线); } // 此处可注入Repository检查用户名是否已存在 return result; } }2. 邮箱验证器// 文件路径src/main/java/com/example/demo/verity/validator/impl/EmailValidator.java import com.example.demo.verity.model.UserRegistrationRequest; import com.example.demo.verity.result.VerificationResult; import com.example.demo.verity.validator.Validator; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import java.util.regex.Pattern; Component public class EmailValidator implements ValidatorUserRegistrationRequest { private static final String EMAIL_REGEX ^[A-Za-z0-9_.-](.)$; private static final Pattern PATTERN Pattern.compile(EMAIL_REGEX); Override public VerificationResult validate(UserRegistrationRequest request) { VerificationResult result new VerificationResult(); String email request.getEmail(); if (!StringUtils.hasText(email)) { result.addError(邮箱不能为空); } else if (!PATTERN.matcher(email).matches()) { result.addError(邮箱格式不正确); } return result; } }3. 密码验证器// 文件路径src/main/java/com/example/demo/verity/validator/impl/PasswordValidator.java import com.example.demo.verity.model.UserRegistrationRequest; import com.example.demo.verity.result.VerificationResult; import com.example.demo.verity.validator.Validator; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; Component public class PasswordValidator implements ValidatorUserRegistrationRequest { Override public VerificationResult validate(UserRegistrationRequest request) { VerificationResult result new VerificationResult(); String password request.getPassword(); String confirmPassword request.getConfirmPassword(); if (!StringUtils.hasText(password)) { result.addError(密码不能为空); } else if (password.length() 8) { result.addError(密码长度不能少于8位); } else if (!password.matches(.*[A-Z].*)) { result.addError(密码必须包含至少一个大写字母); } else if (!password.matches(.*[a-z].*)) { result.addError(密码必须包含至少一个小写字母); } else if (!password.matches(.*\\d.*)) { result.addError(密码必须包含至少一个数字); } // 确认密码校验 if (!StringUtils.hasText(confirmPassword)) { result.addError(确认密码不能为空); } else if (!password.equals(confirmPassword)) { result.addError(两次输入的密码不一致); } return result; } }4.4 创建控制器 (Controller)创建一个简单的 REST 端点来接收注册请求并触发验证。// 文件路径src/main/java/com/example/demo/verity/controller/RegistrationController.java import com.example.demo.verity.model.UserRegistrationRequest; import com.example.demo.verity.result.VerificationResult; import com.example.demo.verity.service.UserRegistrationVerityService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; RestController RequestMapping(/api/register) public class RegistrationController { Autowired private UserRegistrationVerityService verityService; PostMapping public ResponseEntity? register(RequestBody UserRegistrationRequest request) { // 调用验证服务 VerificationResult result verityService.verify(request); if (!result.isValid()) { // 验证失败返回错误信息 return ResponseEntity.badRequest().body(result.getErrorMessages()); } // 验证通过执行后续业务逻辑如保存用户 // userService.save(request); return ResponseEntity.ok(注册成功); } }4.5 运行与验证启动应用运行DemoVerityApplication的 main 方法。使用工具测试使用 Postman、cURL 或任何 API 测试工具。发送测试请求请求1无效数据curl -X POST http://localhost:8080/api/register \ -H Content-Type: application/json \ -d { username: ab, email: invalid-email, password: 123, confirmPassword: 456 }预期响应[ 用户名长度必须在4到20个字符之间, 邮箱格式不正确, 密码长度不能少于8位, 密码必须包含至少一个大写字母, 密码必须包含至少一个小写字母, 密码必须包含至少一个数字, 两次输入的密码不一致 ]所有验证器的错误被汇总返回。请求2有效数据curl -X POST http://localhost:8080/api/register \ -H Content-Type: application/json \ -d { username: valid_user_123, email: userexample.com, password: Passw0rd!, confirmPassword: Passw0rd! }预期响应“注册成功”5. 常见问题与排查思路在实现和使用此类验证模块时你可能会遇到以下问题问题现象常见原因解决思路验证器未生效请求直接通过或报其他错误。1. 验证器类未被 Spring 管理缺少Component等注解。2.UserRegistrationVerityService中注入的验证器列表为空或类型不匹配。3. Controller 中未调用验证服务。1. 检查各个Validator实现类是否添加了Component。2. 检查UserRegistrationVerityService的构造器参数确保其类型为ValidatorUserRegistrationRequest并且这些Bean已被创建。3. 在 Controller 方法中打上断点确认verityService.verify()被调用。验证规则复杂正则表达式性能差。在validate方法中频繁编译正则表达式如Pattern.compile。将正则表达式模式对象Pattern定义为类的静态常量避免每次验证都重新编译。错误信息不友好或过于技术化。验证器返回的错误信息是硬编码的字符串或者直接抛出异常信息。1. 将错误信息定义为常量或放入资源文件如messages.properties以便国际化。2. 错误信息应面向最终用户提示应清晰、可操作。需要根据不同场景应用不同的验证规则组。所有验证器都被注入到同一个服务中无法按需选择。1. 可以创建多个不同的“Verity Service”每个服务注入不同的验证器组合。2. 或在服务层增加一个策略参数动态选择验证器链。验证逻辑需要依赖数据库查询如查重。验证器中直接注入Repository进行数据库操作可能导致事务或循环依赖问题。1. 确保验证器是 Spring Bean可以正常注入Repository。2. 考虑将“存在性校验”这类I/O操作放在服务层与纯逻辑校验分开或使用缓存优化。6. 最佳实践与工程建议将“验证”逻辑模块化并提升到“Verity”的层次是提升代码质量的重要手段。以下是一些进阶建议使用 JSR 380 (Bean Validation) 进行声明式验证对于简单的、基于字段的验证如NotNull,Email,Size应优先使用标准注解。Spring Boot 完美支持。这可以与自定义的VerityService结合注解负责基础格式校验VerityService负责复杂的业务规则校验。实现验证器的可配置化不要将验证规则如密码最小长度、允许的用户名字符硬编码在代码中。可以将其提取到配置类或数据库表中通过Value或ConfigurationProperties注入。这样在规则变更时无需重新部署应用。统一的异常与结果处理考虑定义统一的验证异常类如ValidationException并携带VerificationResult。在全局异常处理器 (ControllerAdvice) 中捕获此类异常将其转换为标准化的错误API响应格式。验证流程的可观测性在重要的验证节点添加日志使用 SLF4J记录验证开始、结束、关键决策点。这对于排查线上复杂的业务数据问题非常有帮助。单元测试至关重要为每一个Validator编写充分的单元测试覆盖正常路径和所有边界情况、异常路径。VerityService的测试则侧重于验证器组合和结果聚合的逻辑。考虑异步验证如果某些验证规则非常耗时如调用外部服务进行实名认证可以考虑将验证器设计为返回CompletableFutureVerificationResult并在VerityService中使用异步方式并行执行最后汇总结果以提升接口响应速度。清晰的包结构与命名正如本例所示将验证相关代码放在verity或validation包下并进一步按model,validator,service,result等子包组织。命名上服务类可以用XXXVerityService或XXXVerificationService使其职责一目了然。通过以上实践你将构建出一个职责清晰、易于测试、便于扩展的验证体系。这个“Verity”层会成为你业务逻辑中坚实可靠的门卫确保流入核心业务的数据都是干净、合规的从而大幅降低系统出错的概率。

相关新闻

08-模型调优实战:超参、数据增强、分辨率、batch优化

08-模型调优实战:超参、数据增强、分辨率、batch优化

模型调优实战:超参、数据增强、分辨率、batch优化 作者:黒漂技术佬 一、调优的基本心法 调参这事,新手最爱干的是对着超参列表一顿乱改,跑一晚上训练,第二天发现mAP纹丝不动。调参的正确姿势是:先看数据,再调参数。 模型不是魔法,它只能从你给的数据里学到东西。数据不…

2026/8/9 2:59:02 阅读更多 →
2026年GEO推广合作评测:三类企业获客效率横向对比

2026年GEO推广合作评测:三类企业获客效率横向对比

2026年GEO推广合作评测:三类企业获客效率横向对比在数字化营销浪潮中,GEO推广结合抖音SEO已成为企业获取本地精准流量的核心路径,但不同服务商的落地效果差异显著。本次评测选取本地生活、商贸零售、服务业三类典型企业场景,通过实…

2026/8/9 2:59:02 阅读更多 →
UHF的LC滤波器要用什么电感?

UHF的LC滤波器要用什么电感?

对开关柜局部放电的UHF(特高频)信号滤波,且工作频段明确为 300MHz - 1500MHz,在绕线电感和叠层电感之间,强烈建议选择叠层电感(Multilayer Inductor)。虽然在前面的通用UHF讨论中提到绕线电感Q值…

2026/8/9 2:59:02 阅读更多 →

最新新闻

六自由度空地导弹弹道仿真与混合控制策略

六自由度空地导弹弹道仿真与混合控制策略

1. 六自由度空地导弹弹道仿真项目概述这个六自由度空地导弹弹道仿真项目,是我在飞行器制导与控制领域深耕多年后的一次实战总结。不同于常见的三自由度简化模型,六自由度仿真完整考虑了导弹的俯仰、偏航、滚转三个角运动以及前后、左右、上下三个线运动&…

2026/8/9 3:48:39 阅读更多 →
PCIe通道与带宽深度解析:从NRZ到PAM4,拆解SSD高速通道的每一代跃迁

PCIe通道与带宽深度解析:从NRZ到PAM4,拆解SSD高速通道的每一代跃迁

摘要:PCIe总线是SSD性能天花板的核心决定因素。本文从PCIe串行差分信号原理出发,系统拆解六代PCIe的编码方式、带宽计算公式、协议开销模型,深入分析Gen6的PAM4FECFLIT三件套变革,展望Gen7的光电互连路线,并结合2026年…

2026/8/9 3:48:39 阅读更多 →
架构图也能过妆容门禁?误放行与硬拒绝修复

架构图也能过妆容门禁?误放行与硬拒绝修复

架构图也能过妆容门禁?误放行与硬拒绝修复现象作品集里出现一张 后端分层架构示意图(Controller / domain / mapper / 红字批注),标签却是「创意/主题妆」。用户质疑完全正确:这不是妆容,为什么能识别通过&…

2026/8/9 3:48:39 阅读更多 →
电商API选型实测评测:从成本到合规的全维度对比

电商API选型实测评测:从成本到合规的全维度对比

电商API选型实测评测:从成本到合规的全维度对比做跨境电商的老炮都知道,电商API是打通多平台数据的核心枢纽,选砸了要么是调用费吞掉大半利润,要么是不合规被平台限流,甚至直接断接口损失几十万GMV。今天就拿市面上4款…

2026/8/9 3:48:39 阅读更多 →
蓝速科技会议预约屏与电子门牌行政减负实战指南

蓝速科技会议预约屏与电子门牌行政减负实战指南

在现代企业的日常运营中,真正消耗行政团队精力的,往往不是那些复杂的流程审批或战略规划,而是日复一日、琐碎且重复的“无效答疑”。想象一下这样的场景:行政人员刚坐下准备整理季度报表,就被打断询问“三号会议室现在…

2026/8/9 3:48:39 阅读更多 →
木工行业自动包装线技术解析与选型指南

木工行业自动包装线技术解析与选型指南

1. 木工行业自动包装线现状与需求分析 木制品生产企业的包装环节长期以来都是劳动密集型工序,传统人工包装方式存在效率低下、成本攀升、产品损伤率高等痛点。以实木地板生产线为例,一个中型工厂每天需要包装超过5000平方米的产品,传统方式需…

2026/8/9 3:47:38 阅读更多 →

日新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/8 17:02:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/8 17:02:44 阅读更多 →