首页
学习
活动
专区
圈层
工具
发布

spring 注解验证@NotNull等使用方法

常用标签 @Null 被注释的元素必须为null @NotNull 被注释的元素不能为null @AssertTrue 被注释的元素必须为true @AssertFalse 被注释的元素必须为false...: vo 页面传过来的数据进行校验 inferface : 只是作为标记一个组别 可以在vo验证的某个字段上面加入多个组别,这样没有加入的组别就不会验证这个字段 controller: 需要 加入...@Validated (GroupInterface1.class) //GroupInterface1.class是定义的分组 GroupInterface2.class 需要校验的字段是不会验证的...@DateTimeFormat(pattern = "yyyy-MM-dd") // 日期格式化转换 @NotNull // 不能为空 private Date date; @NotNull.../*** * 解析验证参数错误 * @param vp —— 需要验证的POJO,使用注解@Valid 表示验证 * @param errors 错误信息,它由Spring MVC通过验证POJO后自动填充

83510

spring mvc 使用@notNull 注解验证请求参数

spring mvc 使用@notNull 注解验证请求参数 使用方式 @NotNull @Min @valid 验证生效 进阶 注解接口 校验逻辑实现 自定义注解使用 其他校验注解 处理请求时,...有些参数是必传或者必须遵循某些规则的, 如果针对每个请求都写一遍验证的话相当繁琐, 而且代码维护起来也麻烦, 正好框架将参数校验的功能抽象处理啊了, 我们可以利用这个完成80%的校验场景 使用方式...使用起来很简单, 只需要加上几个注解即可 @NotNull 在需要验证的非空字段前面加上@NotNull注解(注解还可设置提示语), 如下 @Min 有写数值类型的需要限制范围, 例如: 时间需要大于...0 @valid 在需要校验的接口的入参前加上@valid注解 验证生效 这两个地方加上注解就可以了 进阶 有时候默认的非空或者范围校验不能满足部分定制化的需求 我们可以通过自定义校验注解来按我们的凡是校验数据...null @NotNull: 被注释的元素不能为null @AssertTrue: 被注释的元素必须为true @AssertFalse: 被注释的元素必须为false @Min(value): 被注释的元素必须是一个数字

2.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    5大隐藏的jOOQ功能

    jOOQ的主要价值主张是显而易见的:Java中的类型安全的嵌入式SQL。 当然,积极寻找这样一个SQL构建者的人将不可避免地偶然发现jOOQ并喜欢它。...但是很多人并不真正需要SQL构建器 - 但是,jOOQ在其他情况下通过其鲜为人知的功能仍然非常有用。 这是前五个“隐藏”的jOOQ功能列表。...jOOQ的org.jooq.Result 是这样的List,幸运的是,您可以使用DSLContext.fetch(ResultSet)轻松导入任何JDBCResultSet : try (ResultSet...jOOQ Result类型具有很好的格式化功能。...升级我们基于JDBC的应用程序以使用jOOQ(当然,这是最好的选择,但它也需要一些时间)。 只需使用如下所示的jOOQ解析连接,即可开箱即用很多代码!

    3.1K30

    @NotNull 等注解的简单使用

    =null){ return "密码不能为空,请重新输入"; } 这样就会显得特别low,而且极不美观 这时候就要用到一个注解@NotNull 简单举例说明: @Data public class...UserInfo { @NotNull(message = "姓名不能为null") private String name; @Max(value = 30,message...@Pattern(value) 限制必须符合指定的正则表达式 @Size(max,min) 限制字符长度必须在min到max之间 @Past 验证注解的元素值(日期类型)比当前时间早 @NotEmpty...验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0) @NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank...只应用于字符串且在比较时会去除字符串的空格 @Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式 二次更新:所有的Controller 都写这样的代码就要封装成异常类

    1.3K50

    Java中的注解 – @NotNull「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 比如说,你写了一个后台系统,接收用户的请求,经过运算后返回结果,很通用的一个实现方案。...记得我们之前说过的编码理念,Don’t repeat yourself,就派上用场了。 Java中已经定义了@NotNull的注解,可以用来做这件事。...(我们也可以自定义注解,见上一篇文章)在我们这个场景,我们的需求是: 在请求类中,所有不能为空的属性上,需要标记为@NotNull 写一个通用的validation方法,获取请求中的参数,检查如果有标记...@NotNull,且参数的值为null,则抛出异常。...NotNull private Integer age; private Boolean gender; // 省略getter, setter方法 } 为了使校验参数的方法得到最大的通用性

    5.4K11

    @NotNull注解引出的关于Java空指针的控制

    这是最重要的避免NullPointException的java技巧,但是结果会是极大的改进,因为equal()是一个很普遍的方法。...5)使用@NotNull和@Nullable注释 当写你可以定义关于约定可空性(Nullability),要通过使用像@NotNull和@Nullable类似的注释提示这个方法是否为空安全(null safe...这些注释也是JSR 305(译者注:可以理解为java的标准)的一部分。通过看到@NotNull和@Nullable,程序猿可以自己决定是否去进行空检查。...但是这种处理必须非常小心地处理对空值的检查而不是检查非法输入。同样要注意,定义可以使空值的或者不可以空值的时候,提醒调用者作出被告知的决定。失败之后的选择或者接受空值也是一个你需要重视的重要设计。...如果调用者没有任何的上述的这些方法,那么有可能返回的是空对象而不是空(null)。空对象是一个特别的对象,它在不同的上下文中有不同的含义。

    2.1K00

    【Jetpack】Room 预填充数据 ( 安装 DB Browser for SQLite 工具 | 创建数据库文件 | 应用中设预填充数据对应的数据库文件 | 预填充数据库表字段属性必须一致 )

    " AUTOINCREMENT) ); 继续添加 name 和 age 两个字段 ; 生成的 SQL 语句如下 : CREATE TABLE "" ( "id" INTEGER NOT NULL,..."name" TEXT, "age" INTEGER, PRIMARY KEY("id" AUTOINCREMENT) ); 为数据库表设置名称 student ; 生成的 sql 语句如下所示...: CREATE TABLE "student" ( "id" INTEGER NOT NULL, "name" TEXT, "age" INTEGER, PRIMARY KEY("id" AUTOINCREMENT...例如,位于的文件的路径 * “assets/databases/products.db”将变成“databases/products.db”。 * * 将验证预打包的数据库模式。...NOT NULL, PRIMARY KEY("id" AUTOINCREMENT) ); 2、RoomDatabase 类代码 在 RoomDatabase.Builder 构建器创建时 , 调用

    1.7K20

    【Jetpack】使用 Room Migration 升级数据库并导出 Schema 文件 ( Schema 文件简介 | 生成 Schema 文件配置 | 生成 Schema 文件过程 )

    修改表语句 : 包括 需要修改的表的名称 和 需要修改的字段的定义信息 ; 插入数据语句 : 包括 需要插入数据的表的名称 和 插入的数据 ; 删除数据语句 : 包括 需要删除数据的表的名称 和 删除的条件...student", "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT..."fieldPath": "name", "columnName": "name", "affinity": "TEXT", "notNull...student", "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT...student", "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT

    82710

    【SpringBoot DB系列】Jooq批量写入采坑记录

    【SpringBoot DB系列】Jooq批量写入采坑记录 前面介绍了jooq的三种批量插入方式,结果最近发现这里面居然还有一个深坑,我以为的批量插入居然不是一次插入多条数据,而是一条一条的插入.....三种插入姿势 关于项目创建以及jooq的相关使用姿势,推荐查看之前的博文: 【DB系列】Jooq之新增记录使用姿势 下面是我们采用的三种批量插入方式 /** * 通过Record执行批量添加 *...jooq的三种常见的用法 直接借助自动生成的Record类来操作 类sql的拼接写法,基本上我们平时的sql怎么写,这里就怎么用 InsertQuery:借助jooq提供的各种Query类来执行目标操作...日志验证 上面三种写法中,第一种批量插入方式,并不是我们传统理解的一次插入多条记录,相反它是一条一条的插入的,我们可以通过开启jooq的日志来查看一些执行的sql情况 配置文件 application.properties...从上面的sql来看,后面两个确实是一次插入多条,但是第一个,也没有将具体执行的sql打印出来,所有不看源码的话,也没有办法实锤是一条一条插入的 为了验证这个问题,一个简单的解决办法就是批量插入两条数据,

    1.8K10

    【SpringBoot DB系列】Jooq批量写入采坑记录

    [logo.jpg] 【SpringBoot DB系列】Jooq批量写入采坑记录 前面介绍了jooq的三种批量插入方式,结果最近发现这里面居然还有一个深坑,我以为的批量插入居然不是一次插入多条数据,而是一条一条的插入...三种插入姿势 关于项目创建以及jooq的相关使用姿势,推荐查看之前的博文: 【DB系列】Jooq之新增记录使用姿势 下面是我们采用的三种批量插入方式 /** * 通过Record执行批量添加 *...jooq的三种常见的用法 直接借助自动生成的Record类来操作 类sql的拼接写法,基本上我们平时的sql怎么写,这里就怎么用 InsertQuery:借助jooq提供的各种Query类来执行目标操作...日志验证 上面三种写法中,第一种批量插入方式,并不是我们传统理解的一次插入多条记录,相反它是一条一条的插入的,我们可以通过开启jooq的日志来查看一些执行的sql情况 配置文件 application.properties...打印出来,所有不看源码的话,也没有办法实锤是一条一条插入的 为了验证这个问题,一个简单的解决办法就是批量插入两条数据,第一条正常,第二条异常,如果第一条插入成功,第二条失败那就大概率是单个插入的了 //

    1.4K00

    JetPack--Room数据库

    需要满足:定义的类是一个继承RoomDatabase的抽象类,注解中定义包含实体类列表,包含一个没有参数的抽象方法并返回Dao对象 一、Room上手 首先添加依赖: implementation...,对于其他我们代码里使用的构造方法,可以使用@Ignore注解表示Room将忽略它,属性也可以使用这个注解,表示这个属性将不会生成数据库字段 使用@PrimaryKey注解指定主键并且是自增长的 属性还可以指定在数据库的字段等..."User", "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT.../"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` // (`id` INTEGER PRIMARY KEY AUTOINCREMENT..."CREATE TABLE temp_user (" + "id INTEGER PRIMARY KEY AUTOINCREMENT

    1.8K20

    JOOQ框架常见SQL注入场景

    0x01 关于JOOQ JOOQ是一个ORM框架,利用其生成的Java代码和流畅的API,可以快速构建有类型约束的安全的SQL语句。...1.1 核心接口 通过这两个接口可以执行对应的SQL语句: org.jooq.impl.DSL是生成所有jOOQ对象的主要类。...例如mybatis里常见的like查询,经常会出现SQL注入问题,jooq提供的表达式已经进行了相应的处理,使用也比较方便: result=result.and(jooq.NAME.like("%"...但是jOOQ并不支持每个数据库中的所有SQL功能,JOOQ还存在很多字符串sql拼接的API,例如如下的and(String s),可以看到JOOQ給对应的API标记了@PlainSQL注解,注释里也提醒了会存在...这里直接将name进行SQL拼接,存在SQL注入的风险(报错注入验证): 正确的做法应该是对对应的参数进行预编译处理: result=result.and("name like CONCAT('%'

    93210
    领券