Jboot v3.7.5 发布,全网最优雅的数据验证方式

脱发程序员 2020-12-24 14:58:28 ⋅ 694 阅读

Jboot 是一个基于 JFinal、JFinal-Undertow、Dubbo、Seata、Sentinel、ShardingSphere、Nacos 等开发的微服务框架,帮助开发者降低微服务开发门槛。同时完美支持在 idea、eclipse 下多 maven 模块,对 java 代码、html、css、js 等资源文件进行热加载。爽爽开发,快乐生活。

到目前为止,Jboot 已经开源超过了 4 年的时间,迭代了 160+ 个版本,已经被超过 1000+ 公司在使用,其中包含了多个知名的上市公司。

Jboot V3.7.5  增强 Jboot  的验证方式,在 Jboot 之前的 @EmptyValidate、@RegexValidate 等基础上,进一步基于 JSR 303 – Bean Validation 简化了验证方式,相比 Spring 更加优雅简单。

@NotNull 验证

在 Controller (或 Service 等)中,我们可以直接通过 @NotNull 注解给 Controller 添加,例如:

 public void test(@NotNull String para) {
        renderText("test6");
    }

可能你说,在参数中添加 @NotNull 在 Spring 也支持呀,但是如果使用 @Size 等验证,Spring 是无法直接给参数添加的,比如:

 public void test(@Size(min=2,max=10) String para) {
        renderText("test6");
    }

这个要做要求前端传入的 para 参数的长度必须是在 2 ~ 10 直接。

@Size 验证

@Size 验证,不仅仅可以验证 String 数据的长度,也可以验证 int long 等数据类型的值的大小范围。比如:

 public void test(@Size(min=2,max=10) int value) {
        renderText("test6");
    }

这个要求 value 的值必须在 2 ~ 10 直接。

当然,我们还可以使用 @Size 来验证 Map/List/数组的长度,比如配合 @JsonBody 来接收前端传入的值:

public void list(@Size(min=2,max=10) @JsonBody() List<MyBean> list) {        
      System.out.println("list--->" + list);        
      renderText("ok");
  }

要求前度传入的 MyBean Json 数组的长度必须是在 2~10 之间。

@NotEmpty 验证

@NotEmpty 不仅仅可以验证 String 类型不能为 null 和 空字符串,也可以验证 Map、List、数组等不能为空,比如:

public void list(@NotEmpty() @JsonBody() List<MyBean> list) {        
      System.out.println("list--->" + list);        
      renderText("ok");
  }

要求前端掺入的 MyBean Json 数组必须有值。

@Valid 验证

@Valid 是针对整个 Java Bean 验证,也可以对 JFinal 的 Model 进行验证。的 MyBean Json 数

比如 MyBean 定义如下:

public class MyBean {
    private String id;  
 
    @NotBlank(message = "密码不能为空")
    private String password;

    @Size(min=0,max=2,message = "性别的值只能是 0 1 2")
    private int sex;

    @Min(value = 18,message = "未成年禁止入内")  
    private Integer age; 
}

 在 Controller 或者 Service 中,如下代码可以直接对 MyBean 进行验证:

 public void test(@Valid() MyBean bean) {
        renderText("test6");
    }

如果 MyBean 是一个 JFinal 的 Model,我们只需要在 getter 方法添加注解即可。

除了以上的基本示例以外,Jboot 的验证还支持了更多的验证:

注解 说明
@NotNull 限制必须不为null
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

在使用在写验证注解中,我们不仅仅在 Controller 里进行对 http 请求数据进行验证,一样可以在 Service (provider)中对传入的参数进行验证。

在前端中,如果出现验证失败,会返回如下的 Json 内容(可以通过配置 ErrorRender 来修改掉如下的内容):

{
    "throwable": "io.jboot.components.valid.ValidException: 必须小于或等于200",
    "errorMessage": "age max value is 200, but current value is 1001 at method: io.jboot.test.validate.ValidateController.test17(int)",
    "errorCode": 400,
    "state": "fail",
    "message": "必须小于或等于200"
}

在 Service 中验证失败会向外抛出 ValidException 异常。

当然还有更多的功能此处不再一一举例,欢迎给位小伙伴使用 Jboot 开发的时候爽起来。

开发文档:

https://jbootprojects.gitee.io/docs/

同时,Jboot 官方也推出了企业级开发框架 JbootAdmin,详情 https://jbootprojects.gitee.io/docs/jbootadmin/

maven 依赖:

<dependency>
    <groupId>io.jboot</groupId>
    <artifactId>jboot</artifactId>
    <version>3.7.5</version>
</dependency>

Hello World:

@RequestMapping("/")
public class HelloworldController extends JbootController {

    public void index(){
        renderText("hello world");
    }

    public static void main(String[] args){
        JbootApplication.run(args);
    }
}

全部评论: 0

    我有话说:

    Jboot v3.5.6 发布,监控到每条 Sql消耗时间

    简介 Jboot 是一个基于 JFinal、JFinal-Undertow、Dubbo、Seata、Sentinel、ShardingSphere、Nacos 等开发微服务框架,帮助开发者降低微

    SQLite 3.35.3 发布常用数据库引擎

    SQLite 3.35.3 发布了,SQLite 是一个 C 实现 SQL 数据库引擎,它特点是小型、快速、自包含、高可靠性和功能齐全。SQLite 嵌入在所有手机和大多数计算机中,也捆绑在

    WebMIS 1.0.0 beta.3 发布栈开发基础框架

    ,为企业提供一套完整技术解决方案,满足快速开发...

    详细一篇SpringCloud总结

    什么是Spring cloud 构建分布式系统不需要复杂和容易出错。Spring Cloud 为常见分布式系统模式提供了一种简单且易于接受编程模型,帮助开发人员构建有弹性、可靠、协调

    IntelliJ IDEA 2020.3 EAP7 发布

    十月以来,IntelliJ IDEA 2020.3 已经迭代了 5 个版本。10 月 7 日,IntelliJ IDEA 2020.3 EAP 3 发布,11 月 5 日,EAP 7 发布。 新版本

    Apache Camel 3.7.3 发布

    Apache Camel 3.7.3 已经发布。Apache Camel 是一个开源集成框架,可以帮助用户迅速而方便地整合各种系统消耗或生产数据。本次更新是 LTS 3.7.x 分支修补程序版本

    SQLite 3.34.0 发布,世界上使用量数据库引擎

    SQLite 3.34.0 发布了,SQLite 是一个 C 实现 SQL 数据库引擎,它特点是小型、快速、自包含、高可靠性和功能齐全。SQLite 嵌入在所有手机和大多数计算机中,也捆绑在

    kongx v2.0.0 发布关 kong 可视化管理平台

    kongx v2.0.0 已经发布。kongx是关 kong 可视化界面管理平台(参考 konga 部分界面布局方式),能够集中化管理应用不同环境关配置,提供同步各环境关配置功能,并且

    精品推荐:历时7天,精心整理了16个各领域盘搜索工具

    1.鸠摩搜书https://www.jiumodiary.com/一个强大搜书神站,无论是什么类型书籍,

    dubbogo v1.5.6 发布,性能提升并带来多项新特性

    dubbogo 社区近期发布了 dubbogo v1.5.6。该版本和 dubbo 2.7.8 对齐,提供了命令行工具,并提供了多种加载配置方式。 相关改进实在太多,本文只列出相关重大

    Elasticsearch 7.9.3 发布

    Elasticsearch 是一个分布式 RESTful 风格搜索和数据分析引擎,能够解决越来越多用例。Elasticsearch 7.9.3 已经发布,本次更新信息如下: BUG 修复

    Spring Framework 5.3.4 和 5.2.13 发布

    Spring Framework 5.3.4 和 5.2.13 已发布5.3.4 版本包括 62 项修复和改进,5.2.13 包含 18 项修复和改进。具体如下。 v5.3.4 部分新特性 在

    swagger-admin v1.3.5 已经发布,Swagger 文档管理后台

    swagger-admin v1.3.5 已经发布,这是一个Swagger文档管理后台,可统一管理多个项目Swagger文档,只需要一个Java8环境,下载后即可运行使用。 支持导入json,非

    数据结构

    结构,简单理解就是关系。严格点说,结构是指各个组成部分相互搭配和排列方式。在现实世界中,不同数据元素之间不是独立,而是存在特定关系,我们将这些关系成为结构。 数据结构:是相互之间存在一种

    OkHttps v3.0.0 发布,对 OkHttp3 轻量封装框架

    OkHttps v3.0.0 已经发布,此版本更新内容包括: 1、项目分割,分离出 data 项目单独维护(JSON、XML 等结构化数据统一抽象 API):https://gitee.com

    Logstash 7.9.2 发布,开源服务端数据处理流程

    Logstash 是开源服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到你喜欢“存储库”中。目前,Logstash 7.9.2 已正式发布,该版本更新内容如下

    Riot 5.3.1 发布,基于组件 UI 库

    Riot 5.3.1 现已发布。Riot 是一个简单而优雅基于组件 UI 库,为所有现代浏览器带来了自定义组件,压缩文件大小仅有 6 KB,支持 FireFox、Chrome、Edge

    推荐一款功能强大,开源免费H5可视化编辑器

    H5-Dooring 是一款功能强大,开源免费H5可视化页面配置解决方案,致力于提供一套简单方便、专业可靠、无限可能H5落地页最佳实践。技术栈以react为主, 后台采用nodejs开发. 预览

    SourceGit v3.3 已经发布,开源 Git 客户端

    SourceGit v3.3 已经发布,这是一个开源 Git 客户端。 此版本更新内容包括: 主题优化 增加auto fetch功能(每10分钟自动fetch打开仓库),可在全局设置中关闭 移