iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >java中validation后台参数验证怎么用
  • 793
分享到

java中validation后台参数验证怎么用

javavalidation 2023-05-31 00:05:55 793人浏览 泡泡鱼
摘要

这篇文章主要介绍了java中validation后台参数验证怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言在后台开发过程中,对参数的校验成为开发环境不可缺少的一

这篇文章主要介绍了java中validation后台参数验证怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、前言

在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节。比如参数不能为null,email那么必须符合email的格式,如果手动进行if判断或者写正则表达式判断无意开发效率太慢,在时间、成本、质量的博弈中必然会落后。所以把校验层抽象出来是必然的结果,下面说下几种解决方案。

二、几种解决方案

struts2的valid可以通过配置xml,xml中描述规则和返回的信息,这种方式比较麻烦、开发效率低,不推荐

validation bean 是基于jsR-303标准开发出来的,使用注解方式实现,及其方便,但是这只是一个接口,没有具体实现.Hibernate Validator是一个hibernate独立的包,可以直接引用,他实现了validation bean同时有做了扩展,比较强大 ,实现图如下:

java中validation后台参数验证怎么用

点此查看中文官方手册

oval 是一个可扩展的Java对象数据验证框架,验证的规则可以通过配置文件、Annotation、POJOs 进行设定。可以使用纯 Java 语言、javascript 、Groovy 、Beanshell 等进行规则的编写,本次不过多讲解

三、bean validation 框架验证介绍

bean validation 包放在Maven上维护,最新包的坐标如下:

<dependency>  <groupId>javax.validation</groupId>  <artifactId>validation-api</artifactId>  <version>1.1.0.Final</version></dependency>

 点击这里查看最新的坐标地址

下载之后打开这个包,有个package叫constraints,里面放的就是验证的的注解:

java中validation后台参数验证怎么用  

下面开始用代码实践一下:

定义一个待验证的bean:Student.java

package com.shishang;import javax.validation.constraints.*;import java.io.Serializable;import java.math.BigDecimal;import java.util.Date;public class Student implements Serializable {  @NotNull(message = "名字不能为空")  private String name;  @Size(min = 6,max = 30,message = "地址应该在6-30字符之间")  private String address;  @DecimalMax(value = "100.00",message = "体重有些超标哦")  @DecimalMin(value = "60.00",message = "多吃点饭吧")  private BigDecimal weight;  private String friendName;  @AssertTrue  private Boolean isHaveFriend(){    return friendName != null?true:false;  }  @Future(message = "生日必须在当前实践之前")  private Date birthday;  @Pattern(regexp = "^(.+)@(.+)$",message = "邮箱的格式不合法")  private String email;  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }  public String getAddress() {    return address;  }  public void setAddress(String address) {    this.address = address;  }  public BigDecimal getWeight() {    return weight;  }  public void setWeight(BigDecimal weight) {    this.weight = weight;  }  public String getFriendName() {    return friendName;  }  public void setFriendName(String friendName) {    this.friendName = friendName;  }  public Date getBirthday() {    return birthday;  }  public void setBirthday(Date birthday) {    this.birthday = birthday;  }  public String getEmail() {    return email;  }  public void setEmail(String email) {    this.email = email;  }}

测试类:StudentTest.java

package com.use;import javax.validation.ConstraintViolation;import javax.validation.Validation;import javax.validation.Validator;import javax.validation.ValidatorFactory;import java.io.Serializable;import java.math.BigDecimal;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.Set;public class StudentTest implements Serializable {  public static void main(String[] args) {    Student xiaoming = getBean();    List<String> validate = validate(xiaoming);    validate.forEach(row -> {      System.out.println(row.toString());    });  }  private static Student getBean() {    Student bean = new Student();    bean.setName(null);    bean.setAddress("北京");    bean.setBirthday(new Date());    bean.setFriendName(null);    bean.setWeight(new BigDecimal(30));    bean.setEmail("xiaogangfan163.com");    return bean;  }  private static ValidatorFactory factory = Validation.buildDefaultValidatorFactory();  public static <T> List<String> validate(T t) {    Validator validator = factory.getValidator();    Set<ConstraintViolation<T>> constraintViolations = validator.validate(t);    List<String> messageList = new ArrayList<>();    for (ConstraintViolation<T> constraintViolation : constraintViolations) {      messageList.add(constraintViolation.getMessage());    }    return messageList;  }}

运行testValidation()方法,输处如下:

  1. 地址应该在6-30字符之间

  2. 邮箱的格式不合法

  3. 生日必须在当前时间之前

  4. 多吃点饭吧

  5. 名字不能为空

总结

  1. 像@NotNull、@Size等比较简单也易于理解,不多说

  2. 因为bean validation只提供了接口并未实现,使用时需要加上一个provider的包,例如hibernate-validator

  3. @Pattern 因为这个是正则,所以能做的事情比较多,比如中文还是数字、邮箱、长度等等都可以做

  4. @AssertTRue 这个与其他的校验注解有着本质的区别,这个注解适用于多个字段。例子中isHaveFriend方法依赖friendName字段校验

  5. 验证的api是经过我加工了一下,这样可以批量返回校验的信息

  6. 有时我们需要的注解可能没有提供,这时候就需要自定义注解,写实现类,下面说一下自定义注解的使用

四、自定义bean validation 注解验证

有时框架自带的没法满足我们的需求,这时就需要自己动手丰衣足食了,恩恩 ,这个不难,下面说下。

这个例子验证字符串是大写还是小写约束标注,代码如下:

枚举类型CaseMode, 来表示大写或小写模式

 package com.defineconstrain;public enum CaseMode {  UPPER,  LOWER;}

定义一个CheckCase的约束标注

package com.defineconstrain;import static java.lang.annotation.ElementType.*;import static java.lang.annotation.RetentionPolicy.*;import java.lang.annotation.Documented;import java.lang.annotation.Retention;import java.lang.annotation.Target;import javax.validation.Constraint;import javax.validation.Payload;@Target( { METHOD, FIELD, ANNOTATION_TYPE })@Retention(RUNTIME)@Constraint(validatedBy = CheckCaseValidator.class)@Documentedpublic @interface CheckCase {  String message() default "{com.mycompany.constraints.checkcase}";  Class<?>[] groups() default {};  Class<? extends Payload>[] payload() default {};  CaseMode value();}

约束条件CheckCase的验证器

package com.defineconstrain;import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;public class CheckCaseValidator implements ConstraintValidator<CheckCase, String> {  private CaseMode caseMode;  public void initialize(CheckCase constraintAnnotation) {    this.caseMode = constraintAnnotation.value();  }  public boolean isValid(String object, ConstraintValidatorContext constraintContext) {    if (object == null)      return true;    if (caseMode == CaseMode.UPPER)      return object.equals(object.toUpperCase());    else      return object.equals(object.toLowerCase());  }}

在Student.java中增加一个属性

@CheckCase(value = CaseMode.LOWER,message = "名字的拼音需要小写")private String spellName;

在StudentTest.java的getBean()方法中增加一行

bean.setSpellName("XIAOGANGFAN");

运行testValidation()方法,输处如下:

  1. 地址应该在6-30字符之间

  2. 邮箱的格式不合法

  3. 生日必须在当前时间之前

  4. 多吃点饭吧

  5. 名字的拼音需要小写

  6. 名字不能为空

说明新增的约束生效了,大功告成

感谢你能够认真阅读完这篇文章,希望小编分享的“java中validation后台参数验证怎么用”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: java中validation后台参数验证怎么用

本文链接: https://www.lsjlt.com/news/222314.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java中validation后台参数验证怎么用
    这篇文章主要介绍了java中validation后台参数验证怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言在后台开发过程中,对参数的校验成为开发环境不可缺少的一...
    99+
    2023-05-31
    java validation
  • SpringBoot怎么使用validation做参数校验
    这篇文章主要介绍了SpringBoot怎么使用validation做参数校验的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot怎么使用validation做参数校验文章都会有所收获,下面我们一起...
    99+
    2023-06-30
  • 怎么使用Bean Validation解决业务中参数校验
    这篇文章将为大家详细讲解有关怎么使用Bean Validation解决业务中参数校验,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。叙述Bean Validation是一个通过配置注解来验证参数的框架,它包...
    99+
    2023-06-20
  • jquery表单验证插件validation怎么用
    这篇文章主要为大家展示了“jquery表单验证插件validation怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jquery表单验证插件validat...
    99+
    2024-04-02
  • SpringBoot 中使用 Validation 校验参数的方法详解
    目录1. Validation 介绍1.1 Validation 注解1.2 @valid 和 @validated的区别2. SpringBoot 中使用 Validator 校验...
    99+
    2024-04-02
  • 如何使用Bean Validation 解决业务中参数校验
    前言 在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大的代码个人感觉有点麻烦: 验证代码繁琐,重复劳动 方法内代码显得冗长...
    99+
    2024-04-02
  • Spring Boot 中怎么利用JSR303 实现参数验证
    今天就跟大家聊聊有关Spring Boot 中怎么利用JSR303 实现参数验证,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Bean Validation 规范内嵌的约束注解实例基...
    99+
    2023-06-05
  • Java项目中前台如何向后台传递参数
    本篇文章为大家展示了Java项目中前台如何向后台传递参数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.传字符串的形式,字符串中每个id用 “,” 隔开打印出来如下形式:前台JS代码functio...
    99+
    2023-05-31
    java ava 目中
  • php后台验证码加密方法怎么实现
    在 web 开发中,验证码(CAPTCHA)是一种用于验证用户操作合法性的工具。例如,在提交表单时,服务器可以生成一张验证码图片,在用户正确输入验证码后再处理表单数据,这样可以防止机器自动提交表单,保护网站数据的安全性。在 PHP 后台开发...
    99+
    2023-05-14
  • jquery中怎么使用ajax向后台传递数组参数
    这篇文章给大家介绍jquery中怎么使用ajax向后台传递数组参数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。需求: 在JS中向后台传递数组参数 分析: JS中的数组是弱类型的可以放...
    99+
    2024-04-02
  • TP6+vue-element-admin怎么实现后台登录验证码
    本篇内容介绍了“TP6+vue-element-admin怎么实现后台登录验证码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!tp6+vue...
    99+
    2023-06-22
  • 怎么在Spring boot中利用validation进行校验
    这篇文章主要为大家详细介绍了怎么在Spring boot中利用validation进行校验,文中示例代码介绍的非常详细,具有一定的参考价值,发现的小伙伴们可以参考一下:前言接触springboot一年多,是时候摆脱这种校验方式了233 ,每...
    99+
    2023-06-06
  • php中如何使用filter_var实现参数验证
    这篇文章给大家分享的是有关php中如何使用filter_var实现参数验证的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。先看看代码:<php class Util...
    99+
    2024-04-02
  • Java对数器验证算法怎么使用
    本文小编为大家详细介绍“Java对数器验证算法怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java对数器验证算法怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。对数器验证算法的正确性对数器介绍有...
    99+
    2023-07-06
  • SSM框架前台传参数到后台乱码怎么办
    这篇文章给大家分享的是有关SSM框架前台传参数到后台乱码怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近在做一个SSM框架的项目,总是遇到一个问题,就是后台接收前端传递的中文参数的时候,参数是乱码的,导致...
    99+
    2023-05-30
    ssm
  • 在API网关中使用Golang函数进行参数验证
    在api网关中,使用golang函数验证api请求参数可以:防止无效或恶意输入进入后端系统。验证请求正文是否为空。验证必需字段是否存在。验证数字字段是否为数字。验证字符串字段是否符合正则...
    99+
    2024-05-01
    api网关 关键词 git golang
  • Golang GinWeb之怎么请求参数绑定和验证
    这篇文章主要讲解了“Golang GinWeb之怎么请求参数绑定和验证”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang GinWeb之怎么请求参数...
    99+
    2024-04-02
  • vue中formdata传值给后台时参数为空怎么解决
    这篇文章主要介绍了vue中formdata传值给后台时参数为空怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue中formdata传值给后台时参数为空怎么解决文章都会有所收获,下面我们一起来看看吧。f...
    99+
    2023-06-30
  • 怎么使用C++验证数字
    这篇文章主要讲解了“怎么使用C++验证数字”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用C++验证数字”吧!首先,从题目中给的一些例子可以分析出来,...
    99+
    2024-04-02
  • Chainer怎么进行超参数调优和模型验证
    Chainer是一个深度学习框架,通常使用Grid Search、Random Search、Bayesian Optimizati...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作