java 后台校验_java validation 后台参数验证

一、前言

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

二、几种解决方案

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

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

41f2a6e1cb1fa797b256798f2a854d95.png

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

三、bean validation 框架验证介绍

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

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

b4d4f3606247535c2fa942a45f12a077.png

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

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

961ddebeb323a10fe0623af514929fc1.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

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 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

2、测试类:StudentTest.java

8f900a89c6347c561fdf2122f13be562.png View Code

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

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

邮箱的格式不合法

生日必须在当前时间之前

多吃点饭吧

名字不能为空

4、总结

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

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

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

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

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

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

四、自定义bean validation 注解验证

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

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

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

8f900a89c6347c561fdf2122f13be562.png View Code

2、定义一个CheckCase的约束标注

8f900a89c6347c561fdf2122f13be562.png View Code

3、约束条件CheckCase的验证器

8f900a89c6347c561fdf2122f13be562.png View Code

4、在Student.java中增加一个属性

8f900a89c6347c561fdf2122f13be562.png View Code

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

bean.setSpellName("XIAOGANGFAN");

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

邮箱的格式不合法

生日必须在当前时间之前

多吃点饭吧

名字的拼音需要小写

名字不能为空

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

代码下载地址:git@github.com:xiaogangfan/vaidation.git

命令: git clone git@github.com:xiaogangfan/vaidation.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值