一、前言

二、几种解决方案

三、使用bean validation 自带的注解验证

四、自定义bean validation 注解验证

 

 

一、前言

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

二、几种解决方案

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

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

    java bean validation 参数验证

    点此查看中文官方手册

   3、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 bean validation 参数验证

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

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

 1 package com.shishang;
 2 
 3 import javax.validation.constraints.*;
 4 import java.io.Serializable;
 5 import java.math.BigDecimal;
 6 import java.util.Date;
 7 
 8 public class Student implements Serializable {
 9 
10 
11     @NotNull(message = "名字不能为空")
12     private String name;
13 
14     @Size(min = 6,max = 30,message = "地址应该在6-30字符之间")
15     private String address;
16 
17     @DecimalMax(value = "100.00",message = "体重有些超标哦")
18     @DecimalMin(value = "60.00",message = "多吃点饭吧")
19     private BigDecimal weight;
20 
21     private String friendName;
22     @AssertTrue
23     private Boolean isHaveFriend(){
24         return friendName != null?true:false;
25     }
26 
27     @Future(message = "生日必须在当前实践之前")
28     private Date birthday;
29 
30     @Pattern(regexp = "^(.+)@(.+)$",message = "邮箱的格式不合法")
31     private String email;
32 
33 
34     public String getName() {
35         return name;
36     }
37 
38     public void setName(String name) {
39         this.name = name;
40     }
41 
42     public String getAddress() {
43         return address;
44     }
45 
46     public void setAddress(String address) {
47         this.address = address;
48     }
49 
50     public BigDecimal getWeight() {
51         return weight;
52     }
53 
54     public void setWeight(BigDecimal weight) {
55         this.weight = weight;
56     }
57 
58     public String getFriendName() {
59         return friendName;
60     }
61 
62     public void setFriendName(String friendName) {
63         this.friendName = friendName;
64     }
65 
66     public Date getBirthday() {
67         return birthday;
68     }
69 
70     public void setBirthday(Date birthday) {
71         this.birthday = birthday;
72     }
73 
74     public String getEmail() {
75         return email;
76     }
77 
78     public void setEmail(String email) {
79         this.email = email;
80     }
81 }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-13
  • 2021-10-05
  • 2021-06-06
  • 2022-02-09
  • 2022-12-23
  • 2021-11-10
猜你喜欢
  • 2021-12-03
  • 2021-08-11
  • 2021-08-13
  • 2021-11-11
相关资源
相似解决方案