首页 文章 精选 留言 我的

精选列表

搜索[窗口预览],共10000篇文章
优秀的个人博客,低调大师

SpEL Validator 预览版发布

前言 大家好,我是阿杆,不是阿轩。 参数校验这个东西,很多情况下都是比较简单的,用 @NotNull、@Size 等注解就可以解决绝大多数场景,但也有一些场景是这些基本注解解决不了的,只能用一些其他的方式处理,这样就导致参数校验变成了多层,其实是不利于代码维护的。 于是乎,我写了一套几乎可以满足任何场景的参数校验组件,名为SpEL Validator ,安利给大家。 GitHub:https://github.com/stick-i/spel-validator 官方文档:https://spel-validator.sticki.cn/ 💡 它解决了什么问题? 枚举值字段校验: @SpelAssert(assertTrue = " T(cn.sticki.enums.UserStatusEnum).getByCode(#this.userStatus) != null ", message = "用户状态不合法") private Integer userStatus; 多字段联合校验: @NotNull private Integer contentType; @SpelNotNull(condition = "#this.contentType == 1", message = "语音内容不能为空") private Object audioContent; @SpelNotNull(condition = "#this.contentType == 2", message = "视频内容不能为空") private Object videoContent; 复杂逻辑校验,调用静态方法: // 中文算两个字符,英文算一个字符,要求总长度不超过 10 // 调用外部静态方法进行校验 @SpelAssert(assertTrue = "T(cn.sticki.util.StringUtil).getLength(#this.userName) <= 10", message = "用户名长度不能超过10") private String userName; 调用 Spring Bean(需要使用 @EnableSpelValidatorBeanRegistrar 开启Spring Bean支持): // 这里只是简单举例,实际开发中不建议这样判断用户是否存在 @SpelAssert(assertTrue = "@userService.getById(#this.userId) != null", message = "用户不存在") private Long userId; 更多使用场景,欢迎探索和补充! 📝 特点 强大的参数校验功能,几乎支持所有场景下的参数校验。 扩展自 javax.validation 包,只新增不修改,无缝集成到项目中。 基于 SpEL(Spring Expression Language) 表达式,支持复杂的校验逻辑。 支持调用 Spring Bean,可在表达式中使用注入过的 Spring Bean。 校验时基于整个对象,支持对象内字段间的校验逻辑。 支持自定义校验注解,可根据业务需求自定义校验逻辑。 无需额外的异常处理,校验失败时会上报到 javax.validation 的异常体系中。 简单易用,使用方式几乎与 javax.validation 一致,学习成本低,上手快。 🎈 环境 目前仅测试了 JDK8 环境,理论上来说 JDK8+ 应该都是支持的。 📦 快速开始 添加依赖 Latest Version: 0.2.0-beta <dependency> <groupId>cn.sticki</groupId> <artifactId>spel-validator</artifactId> <version>Latest Version</version> </dependency> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>${hibernate-validator.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${spring-boot-starter-web.version}</version> </dependency> 在接口参数上使用 @Valid 或 @Validated 注解 @RestController @RequestMapping("/example") public class ExampleController { /** * 简单校验示例 */ @PostMapping("/simple") public Resp<Void> simple(@RequestBody @Valid SimpleExampleParamVo simpleExampleParamVo) { return Resp.ok(null); } } 在实体类上使用 @SpelValid 注解,同时在需要校验的字段上使用 @SpelNotNull 等约束注解 @Data @SpelValid public class SimpleExampleParamVo { @NotNull private Boolean switchAudio; /** * 当 switchAudio 为 true 时,校验 audioContent,audioContent 不能为null */ @SpelNotNull(condition = "#this.switchAudio == true", message = "语音内容不能为空") private Object audioContent; } 添加全局异常处理器,处理校验异常 @RestControllerAdvice public class ControllerExceptionAdvice { @ExceptionHandler({BindException.class, MethodArgumentNotValidException.class}) public Resp<Void> handleBindException(BindException ex) { String msg = ex.getFieldErrors().stream() .map(error -> error.getField() + " " + error.getDefaultMessage()) .reduce((s1, s2) -> s1 + "," + s2) .orElse(""); return new Resp<>(400, msg); } } 发起请求,即可看到校验结果 示例一:@SpelNotNull 校验不通过 请求体: { "switchAudio": true, "audioContent": null } 响应体 { "code": 400, "message": "audioContent 语音内容不能为空", "data": null } 示例二:校验通过 请求体 { "switchAudio": false, "audioContent": null } 响应体 { "code": 200, "message": "成功", "data": null } 示例三:@NotNull 校验不通过 请求体 { "switchAudio": null, "audioContent": null } 响应体 { "code": 400, "message": "switchAudio 不能为null", "data": null } 📖 使用指南 注意:本组件的目的不是代替 javax.validation 的校验注解,而是作为一个扩展,方便某些场景下的参数校验。能够使用 javax.validation 的场景就不要使用 spel-validator ,因为 spel-validator 会有一定的性能损耗。 开启约束校验 需要满足以下两个条件,才会对带注解的元素进行校验: 在接口参数上使用 @Valid 或 @Validated 注解 在实体类上使用 @SpelValid 注解 如果只满足第一个条件,那么只会对带 @NotNull、@NotEmpty、@NotBlank 等注解的元素进行校验。 如果只满足第二个条件,那么不会对任何元素进行校验。 这是因为 @SpelValid 注解是基于 javax.validation.Constraint 实现的,只有在 @Valid 或 @Validated 注解的支持下才会生效。 而 spel-validator 提供的约束注解是基于 @SpelValid 进行扫描校验的,只有在 @SpelValid 注解生效的情况下才会执行约束校验。 使用约束注解 目前支持的约束注解有: 注解 说明 对标 javax.validation @SpelAssert 逻辑断言校验 无 @SpelNotNull 非 null 校验 @NotNull @SpelNotEmpty 集合、字符串、数组大小非空校验 @NotEmpty @SpelNotBlank 字符串非空串校验 @NotBlank @SpelNull 必须为 null 校验 @Null @SpelSize 集合、字符串、数组长度校验 @Size 每个约束注解都包含三个默认的属性: message:校验失败时的提示信息。 group:分组条件,支持 SpEL 表达式,当分组条件满足时,才会对带注解的元素进行校验。 condition:约束开启条件,支持 SpEL 表达式,当 表达式为空 或 计算结果为true 时,才会对带注解的元素进行校验。 调用 Spring Bean 默认情况下,解析器无法识别 SpEL 表达式中的 Spring Bean。 如果需要在 SpEL 表达式中调用 Spring Bean,需要在启动类上添加 @EnableSpelValidatorBeanRegistrar 注解, 开启 Spring Bean 支持。 @EnableSpelValidatorBeanRegistrar @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 自定义约束注解 在注解上使用 @SpelConstraint ,并指定验证器。 然后给注解添加上三个固定的字段 message 、group、condition。 实现验证器 具体实现方式可以参考官方文档。 如果你使用过 javax.validation 的自定义约束注解,那么你会发现 SpEL Validator 的自定义约束注解几乎与 javax.validation 一致。 📦 示例项目 我也写了一个简单的示例项目,有一些基本的使用方法: https://github.com/stick-i/spel-validator-example 最后 贴一下GitHub地址:https://github.com/stick-i/spel-validator (顺手点个star呀~) 欢迎大家进行体验,有任何疑问欢迎一起讨论。

优秀的个人博客,低调大师

🔥🔥🔥超级 ORM 框架 mybatis-mp 预览版 1.6.8-rc 发布

官网 :https://mybatis-mp.cn 更新: 1: 增加sql buidler构建干预口,让你可以更好的扩展sql 为什么推荐 mybatis-mp ?: mybatis-mp 是一款超级强大的 ORM 框架 1:可多表 join(不再只能单表了) 2:良好 resultMap 结果映射能力(不怕映射错误了) 3:良好的扩展能力:orm+sql 模板 (让 ORM 框架不再死板,扩展性极强) 4:就算 xml 也不用再增加什么插件了,自带 xml 分页 5:强大的各种数据库适配,可在一套代码中 实现多个数据库适配;真正的 ORM hibernate 都做不到 6:极简的 api 设计,让开发者 不再迷糊 7:还很多很多独特优良的设计,只有前往体验,才能感受了;不相信可以试试!!! 1.单表 +@Fetch 注解 + fetchFilter 方法 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; private String password; private Integer roleId; private LocalDateTime create_time; @Fetch(source = SysUser.class, property = "roleId", target = SysRole.class, targetProperty = "id") private List<SysRoleVo> sysRoles; } List<SysUserVO> list = QueryChain.of(sysUserMapper) .from(SysUser.class) .fetchFilter(SysUserVO::getRoles,where->where.eq(SysRole::getStatus,1)) .returnType(SysUserVO.class) .list(); fetchFilter 方法是对 @Fetch 注解的增强,没有特殊要求一般,可忽略 2. 单表查询 SysUser sysUser = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName,'admin') .get(); 3.VO 映射 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; //字段名字不一样时 @ResultEntityField(property = "password") private String pwd; } SysUserVO sysUserVO = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName,'admin') .returnType(SysUserVO.class) .list(); 4. join 查询 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; //字段名字不一样时 @ResultEntityField(property = "password") private String pwd; //映射一个对象 1对1 @NestedResultEntity(target = SysRole.class) prviate SysRole sysRole; //映射多个对象 1对多 @NestedResultEntity(target = SysRole.class) prviate List<SysRole> sysRoles; } List<SysUserRoleVO> list = QueryChain.of(sysUserMapper) .from(SysUser.class) .join(SysUser.class, SysRole.class) .returnType(SysUserRoleVO.class) .list(); 还有很多很多超级方便有趣的写法,欢迎大家来使用https://mybatis-mp.cn 例如: 1 . 多表 join A 内嵌 B B 内嵌 C 都可以 2 . 不使用 join 使用 @Fetch 注解 + fetchFilter 方法实现 将 A JOIN B 变成 query A + query B 3 . 使用 @Paging 注解 实现你的 xml 自动分页 4 . 使用 SQL 模板,让你 ORM 更简单更容易扩展,再也不怕被框架限制了

优秀的个人博客,低调大师

支持商品预览、GIF &视频等实用功能

点击作者:成都光大网络关注我们 前言:历经又一个月的精心打磨与改进,我们再次高兴地宣布BeikeShop v1.3.7版本正式上线! 虽说本次版本号的变动非常小,但这次升级的内容非常!非常!非常丰富! 接下来将向大家介绍v1.3.7版本中新增/优化/修复了哪些内容 BeikeShop是什么?—— 一款开源好用的跨境电商系统! ✦✦ 一、BeikeShop新增功能 1. 新增 产品列表页 QuickView(Preview) 功能 用户可以在前台商品列表页,点击“QuickView”按钮 无需开启新的页面,即可快速查看产品详细信息,提供更快捷的浏览体验! 2.新增 后台图片库支持视频以及GIF动图上传 BeikeShop 卖家们翘首以盼的商品视频展示、GIF动图展示功能终于上线了!卖家有更多展示自己产品的方式 v1.3.7版本中,后台图片库中上传和管理视频文件以及Git动态图。 3.新增 游客查看订单页面 修改了对应邮件模板 现在,游客在购买支付后,页面新增了“View more”按钮,点击即可查看订单详细信息(如下图) 同时,在游客付款后收到的邮件中,也对新增了相应的“View more”按钮,游客顾客也能获得详细订单信息 4.新增 韩语语言包: 感谢GitHub用户“China-CowX”提出韩语语言包的PR,我们在这次升级将其加入到系统核心 5. 新增 “支付信息”记录功能 在管理员后台“订单列表”中,点击查看订单详情,可以看到“支付信息”这一栏。用户付款后相关数据、信息在这里显示(如下图) 例如:线下支付中,客户上传了付款凭证。卖家可以在后台,快速的查看支付凭证并确认收款 6.新增 页面hook 产品详情、购物车、结账页、个人中心等页面hook 根据开发者开发插件时的反馈,以及新增功能时发现的问题,再次增加了hook点位。进一步提升了开发的自由度! ✦✦ 二、BeikeShop优化功能 1. 优化 插件字段描述支持多语言 在“插件详情页”中,对字段的解释说明文字描述,支持多语言显示。使更多国家/地区的用户能更方便的安装插件 2. 优化 个人中心页面所有按钮 对个人中心页面中的按钮进行了优化,风格更加简约大气! 3. 优化 后台产品多规格编辑 解决了删除规格导致配置的规格sku数据的错乱,提升了管理多规格产品的效率和便捷性 4. 优化 Cart、Checkout、Total模块兼容多商家 为兼容BeikeShop B2B2C版本,我们对这些模块进行了优化。想要了解BeikeShop B2B2C版的用户欢迎咨询我们哦! 5. 优化 统一订单状态显示 status_format 通过统一订单状态显示,使得插件开发和后续开发更加容易。开发体验极的大优化! 6. 优化 修改地址页面 Fullname 地址编辑中“Name”字段变为 "Fullname",国外买家更容易理解 7. 优化列表页产品SPU图片显示 根据卖家展示商品的需求,在商品列表页、详情页,都会以"SPU商品的第一张主图"作为主图展示 8. 结账页提交订单报错时,显示详细错误原因 在订单提交出现错误,会显示更详细的错误信息,帮助开发者更好地排查和解决问题 9. 优化单页和新闻博客页 10. 优化自动测试脚本 11. 优化结账页、网页头部 ✦✦ 三、BeikeShop修复功能 -修复 某些情况下首页模块 tab_product 报错 - 修复 文章分类页 面包屑、TDK、相关商品无法删除的问题 - 修复 属性筛选配置问题 - 修复 首页幻灯模块 - 修复 税费规则 - 修复 手机版无法点击导航的问题 - 修复 Flexshipping以及系统运费相关问题 - 修复 分类排序和筛选 以上就是本次BeikeShop v1.3.7版本的升级内容总结,我们将持续努力改进系统,为您提供更好的产品和服务 欢迎随时与我们分享您的宝贵建议和反馈,我们将不断迭代优化,为您创造更好的体验! 欢迎下载安装升级,体验更强大的BeikeShop! 想要了解更多信息?点击链接访问! 官方网站 https://beikeshop.com/ ↓前台链接↓ https://demo.beikeshop.com/ ↓后台链接↓ https://demo.beikeshop.com/admin 账号:demo@beikeshop.com 密码:demo 版权所有,转载需注明出处!

优秀的个人博客,低调大师

Zadig v1.0.0 预览版发布,开源分布式持续交付产品

Zadig v1.0.0 已经发布,此版本更新内容包括: 提升 zadig 安装脚本的稳定性和成功率 以下安装环境已经过测试: Existing Cluster Vendor Kubernetes Version Test Result Ali ACK 1.16.9 pass 1.18.8 pass Tencent TKE 1.18.4 pass 1.16.3 pass 1.14.3 pass 1.12.4 pass HuaWei CCE 1.19.8 pass 1.17.17 pass Rancher 1.18 pass 1.20 pass Elastic Compute Service Vendor OS Version Test Result Ali ECS Ubuntu16.04 pass Ubuntu18.04 pass Ubuntu20.04 pass CentOS7.4 pass CentOS8.3 pass Tencent CVM Ubuntu16.04 pass Ubuntu18.04 pass Ubuntu20.04 pass CentOS8.2 pass HuaWei ECS Ubuntu16.04 pass Ubuntu18.04 pass Ubuntu20.04 pass CentOS7.6 pass CentOS8.2 pass Zadig 是一款面向开发者设计的云原生持续交付(Continuous Delivery)产品,具备高可用 CI/CD 能力,提供云原生运行环境,支持开发者本地联调、微服务并行构建和部署、集成测试等。Zadig 不改变现有流程,无缝集成 Github/Gitlab、Jenkins、多家云厂商等,运维成本极低。 详情查看:https://gitee.com/koderover/zadig/releases/v1.0.0

优秀的个人博客,低调大师

若依中按百分比打开弹窗以及获取窗口参数的动态实践

若依是一款用得非常多的开源框架,可以拿来做一些生产级的应用开发。若依包含三种架构模式,第一种是单体架构,第二种是前后端分离模式,第三种是微服务模式。其中第二种和第三种除了后台的技术架构不一致,它的前端开发模式都是用的Vue框架。这里不讨论单体架构和前后端分离的架构模式的优缺点,排开实际需求来谈技术架构都是耍流氓。国内很多的应用场景都是流量比较小,业务逻辑比较简单,开发人员只要将精力专注到具体的业务逻辑当中即可。因而本文介绍得使用架构使用的若依的单体架构,麻雀虽小五脏俱全,通过学习单体架构也能掌握许多后端的设计原理。对与理解前后端分离也有一定的掌握。

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册