一、基本使用

Javax.validation是spring集成自带的一个参数校验接口。可通过添加注解来设置校验条件。

下面以springboot项目为例进行说明。创建web项目后,不需要再添加其他的依赖;

1、 被校验参数

 public class User {
private Long id;
@NotBlank(message = "用户名不能为空")
private String name;
@NotBlank(message = "手机号不能为空")
private String phone;
@NotNull(message = "年龄不能为空")
private Integer age;
}

2、Controller

 @RestController
public class TestController { @RequestMapping("/create")
public String createUser(@Valid User user, BindingResult bindingResult){
if (bindingResult.hasErrors()){
return bindingResult.getFieldError().getDefaultMessage();
}
return "success";
}
}

3、启动服务,然后在本地请求,如果请求参数不对,即可看到我们给出的错误信息

二、所有原生可用的注解

 @NotBlank            元素不能为null,且不能全是空格,用于校验字符串;
@NotEmpty 元素不能为null,且不能为空,用于校验集合类型数据;
@NotNull 元素不能为null,所有类型的数据都可以校验;
@Null 元素必须为null, 所有类型的数据都可以校验;
@Size(min = 1, max = 5) 元素长度介于给定值之前(包含边界),用于校验集合类型数据(包含字符串),;
@Future        元素为时间,且是将来的时间;
@FutureOrPresent   元素为时间,且是现在或将来的时间;
@Past            元素为时间,且是已经过去的时间;
@PastOrPresent      元素为时间,且是现在或已经过去的时间;
@Max(value = 2)      元素值不大于给定值value,可校验所有Number类型数据(除了double和float);;
@Min(value = 1)      元素值不小于给定值value,可校验所有Number类型数据(除了double和float);;
@Negative           元素值为负数,可校验所有Number类型数据;;
@NegativeOrZero      元素值为负数或0,可校验所有Number类型数据;;
@Positive          元素值为正数,可校验所有Number类型数据;;
@PositiveOrZero      元素值为正数或0,可校验所有Number类型数据;;
@DecimalMax(inclusive = true, value = "3.2")   元素值不大于给定值value, inclusive默认是true,可不填,可校验所有Number类型数据(除了double和float);
@DecimalMin(inclusive = false, value = "23")   元素值大于给定值value, inclusive默认是true,可不填,可校验所有Number类型数据(除了double和float);
@Digits(integer = 5, fraction = 7)        元素为数字,且最大长度不超过7位,整数部分最高位不超过5位;
@AssertFalse 元素的值必须为false,用于校验布尔类型元素;
@AssertTrue 元素的值必须为true,用于校验布尔类型元素;
@Email         邮箱名格式校验

注:除了前4个外,其他所有的null会被当作有效处理;

三、自定义校验注解

1、定义注解

 @Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = NameValidator.class)
public @interface NameA { String message() default "这个名字不是以a开头";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}

注意定义时message(),groups(),payload()这三个方法必需要定义,其他的就可以自己增加了;

2、定义校验方法;

 public class NameValidator implements ConstraintValidator<NameA, String> {

     private String reg = "[a,]\\w+";
private Pattern pattern = Pattern.compile(reg); @Override
public void initialize(NameA name){ } @Override
public boolean isValid(String name, ConstraintValidatorContext context){
if (name == null){
return false;
}
return pattern.matcher(name).matches();
}
}

Java web服务端参数校验Javax.validation (springboot)的更多相关文章

  1. Spring Boot2 系列教程 (十五) | 服务端参数校验之一

    估计很多朋友都认为参数校验是客户端的职责,不关服务端的事.其实这是错误的,学过 Web 安全的都知道,客户端的验证只是第一道关卡.它的参数验证并不是安全的,一旦被有心人抓到可乘之机,他就可以有各种方法 ...

  2. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

  3. 如何提高Web服务端并发效率的异步编程技术

    作为一名web工程师都希望自己做的web应用能被越来越多的人使用,如果我们所做的web应用随着用户的增多而宕机了,那么越来越多的人就会变得越来越少了,为了让我们的web应用能有更多人使用,我们就得提升 ...

  4. "轻"量级 Java Web 服务框架漫谈

    博文太长了, 还是先说下概要: 框架"轻量"与否可以从两方面来看待: 1) 框架本身的体量 - 例如小 jar 无依赖的苗条框架; 2) 用户使用框架是否获得各种便利而无阻隔(&q ...

  5. Rsync同步部署web服务端配置

    Rsync同步部署web服务端配置 1,参数详解: -v, --verbose 详细模式输出. -q, --quiet 精简输出模式. -c, --checksum 打开校验开关,强制对文件传输进行校 ...

  6. Web服务端性能提升实践

    随着互联网的不断发展,日常生活中越来越多的需求通过网络来实现,从衣食住行到金融教育,从口袋到身份,人们无时无刻不依赖着网络,而且越来越多的人通过网络来完成自己的需求. 作为直接面对来自客户请求的Web ...

  7. Delphi XE5通过WebService开发Web服务端和手机客户端

    Delphi XE5通过WebService开发Web服务端和手机客户端介绍 我们开发一个三层的android程序 建立一个webservices  stand-alone vcl applicati ...

  8. wsgiref手写一个web服务端

    ''' 通过wsgiref写一个web服务端先讲讲wsgiref吧,基于网络通信其根本就是基于socket,所以wsgiref同样也是通过对socket进行封装,避免写过多的代码,将一系列的操作封装成 ...

  9. winform客户端利用webClient实现与Web服务端的数据传输

    由于项目需要,最近研究了下WebClient的数据传输.关于WebClient介绍网上有很多详细介绍,大概就是利用WebClient可以实现对Internet资源的访问.无外乎客户端发送请求,服务端处 ...

随机推荐

  1. [Linux]下的StarUML永远使用版

    这是Linux下的StarUML,其实windows下的是一样的 请不要用于商业目的 这是Linux下的StarUML 解压之后,这是一个appImage文件,也就是说,双击直接运行的版本 [Bash ...

  2. java wait方法

    wait方法是让当前线程等待,这里的当前线程不是指t,而是主线程. wait会释放锁,等到其他线程调用notify方法时再继续运行. 可以看下面的例子. 1 package com.citi.test ...

  3. NIO网络访问模式实践

    1.创建NioNest12类 一个线程监听5个端口的事件 public class NioTest12 { public static void main(String[] args) throws ...

  4. Python安装依赖包及开发工具转移到Visual Studio 2019

    #pip升级pip install --upgrade pip#安装pillow图形库pip install pillow #安装二维码库 pip install MyQR PyCharm工具导入依赖 ...

  5. Running MYSQL 5.7 By Bash On Ubuntu On Windows:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

    root@PC-RENGUOQIANG:/usr/sbin# /etc/init.d/mysql start * Starting MySQL database server mysqld [ OK ...

  6. 两分钟观看 nodejs、 iojs、 npmjs 之间的狗血剧情

    开门大吉,欢迎光临.这是 乐玩nodejs npm工具库 微信公众号的第一篇文章,那就先来说说 nodejs/npm 的小秘密,话不多说,赶快开始: 通过一个时间线简要描述下 2008 年 V8 引擎 ...

  7. matlab学习笔记12单元数组和元胞数组 cell,celldisp,iscell,isa,deal,cellfun,num2cell,size

    一起来学matlab-matlab学习笔记12 12_1 单元数组和元胞数组 cell array --cell,celldisp,iscell,isa,deal,cellfun,num2cell,s ...

  8. TensorFlow 8 bit模型量化

    本文基本参考自这篇文章:8-Bit Quantization and TensorFlow Lite: Speeding up mobile inference with low precision ...

  9. LODOP常见问题连接(含常见小问答博文)

    问答大全 纸张打印机 注册 table表格 clodop测试地址 字体 超文本 行间距.字间距 clodop回调函数 条码 页眉页脚 SET……STYLEA 水平居中 简短排查 提示报错 慢进度条 套 ...

  10. 使用极光第三方IM的时候服务器报错Caused by: java.net.UnknownHostException: api.im.jpush.cn

    Caused by: java.net.UnknownHostException: api.im.jpush.cn 服务器报这个:首先查看服务器是否能ping通,如果能ping通,则看下 vi /et ...