Spring请求参数校验功能实例演示

2025-05-29 0 86

springmvc支持的数据校验是jsr303的标准,通过在bean的属性上打上@notnull、@max等进行验证。jsr303提供有很多annotation接口,而springmvc对于这些验证是使用hibernate的实现,所以我们需要添加hibernate的一个validator包:

依赖引用

?

1

2
compile 'javax.validation:validation-api:2.0.0.final'

compile 'org.hibernate:hibernate-validator:6.0.0.final'

框架已经提供校验如下:

jsr提供的校验注解:

@null 被注释的元素必须为 null
@notnull 被注释的元素必须不为 null,不能为 null , 可以为 ""
@asserttrue 被注释的元素必须为 true
@assertfalse 被注释的元素必须为 false
@min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@decimalmin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@decimalmax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@size(max=, min=) 验证对象(array,collection,map,string)长度是否在给定的范围之内
@digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@past 被注释的元素必须是一个过去的日期
@future 被注释的元素必须是一个将来的日期
@pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式

hibernate validator提供的校验注解:

@notblank(message =) 只能作用在string上,不能为null,而且调用trim()后,长度必须大于0
@email 被注释的元素必须是电子邮箱地址
@length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@notempty 被注释的字符串的必须非空,不能为 null、"",可以为 " "
@range(min=,max=,message=) 被注释的元素必须在合适的范围内

实例演示

创建需要被校验的实体类:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16
package com.yiba.wifi.news.bean.model;

import org.hibernate.validator.constraints.length;

import javax.validation.constraints.*;

public class user {

@notblank(message = "用户名不能为null,长度必须大于0")

string name; //用户名

@min(value = 1, message = "最小年龄为1岁")

@max(value = 120, message = "最大年龄为120岁")

integer age; //年龄

@email(message = "邮箱格式错误")

@notblank(message = "邮箱格式错误")

string email; //邮箱

@length(min = 6, max = 12, message = "密码长度必须在6位到12位之间")

string pwd;//密码

//get、set.........

}

注意在校验邮箱的时候,当 email 为 "", 或者 null 的时候,会通过 @email验证,所以邮箱校验需要 @email和 @notblank 共同起作用。

controller 接口设计,在参数接受的地方添加 @validated 关键字

?

1

2

3

4

5

6

7

8
/**

* 登录接口

* @return

*/

@postmapping("login")

public string login(@validated @requestbody user user) {

return "ok";

}

访问测试:

当访问数据是如下格式的时候

?

1

2

3

4

5

6
{

"name": "",

"age": 0,

"email": "",

"pwd": ""

}

响应为:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113
{

"timestamp": 1524640724522,

"status": 400,

"error": "bad request",

"exception": "org.springframework.web.bind.methodargumentnotvalidexception",

"errors": [

{

"codes": [

"notblank.user.email",

"notblank.email",

"notblank.java.lang.string",

"notblank"

],

"arguments": [

{

"codes": [

"user.email",

"email"

],

"arguments": null,

"defaultmessage": "email",

"code": "email"

}

],

"defaultmessage": "邮箱格式错误",

"objectname": "user",

"field": "email",

"rejectedvalue": "",

"bindingfailure": false,

"code": "notblank"

},

{

"codes": [

"notblank.user.name",

"notblank.name",

"notblank.java.lang.string",

"notblank"

],

"arguments": [

{

"codes": [

"user.name",

"name"

],

"arguments": null,

"defaultmessage": "name",

"code": "name"

}

],

"defaultmessage": "用户名不能为null,长度必须大于0",

"objectname": "user",

"field": "name",

"rejectedvalue": "",

"bindingfailure": false,

"code": "notblank"

},

{

"codes": [

"length.user.pwd",

"length.pwd",

"length.java.lang.string",

"length"

],

"arguments": [

{

"codes": [

"user.pwd",

"pwd"

],

"arguments": null,

"defaultmessage": "pwd",

"code": "pwd"

},

12,

6

],

"defaultmessage": "密码长度必须在6位到12位之间",

"objectname": "user",

"field": "pwd",

"rejectedvalue": "",

"bindingfailure": false,

"code": "length"

},

{

"codes": [

"min.user.age",

"min.age",

"min.java.lang.integer",

"min"

],

"arguments": [

{

"codes": [

"user.age",

"age"

],

"arguments": null,

"defaultmessage": "age",

"code": "age"

},

1

],

"defaultmessage": "最小年龄为1岁",

"objectname": "user",

"field": "age",

"rejectedvalue": 0,

"bindingfailure": false,

"code": "min"

}

],

"message": "validation failed for object='user'. error count: 4",

"path": "/yiba/sms/login"

}

可以看到本地请求,4个字段校验都没通过,那么我有没有办法获取异常信息呢,答案是有的,需要我们修改 controller 接口。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17
/**

* 登录接口

*

* @return

*/

@postmapping("login")

public string login(@validated @requestbody user user, bindingresult bindingresult) {

if (bindingresult.haserrors()) {

//有校验没通过

list<objecterror> errorlist = bindingresult.getallerrors();

for (objecterror error : errorlist) {

system.out.println(error.getdefaultmessage()); //输出具体的错误信息

}

return "参数异常";

}

return "ok";

}

再次请求请求格式如下

?

1

2

3

4

5

6
{

"name": "",

"age": 0,

"email": "",

"pwd": ""

}

响应如下

参数异常

在控制台打印的信息如下:

用户名不能为null,长度必须大于0
密码长度必须在6位到12位之间
最小年龄为1岁
邮箱格式错误

可以看到我们已经正常的获取到了校验信息了。

下面我们来做一次参照正确的访问:

请求参数如下:

?

1

2

3

4

5

6
{

"name": "zhaoyanjun",

"age": 1,

"email": "362299465@qq.com",

"pwd": "123456"

}

响应如下:

ok

控制台什么也没输出。

总结

以上所述是小编给大家介绍的spring请求参数校验功能实例演示,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对快网idc网站的支持!

原文链接:https://www.cnblogs.com/zhaoyanjun/p/9007056.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Spring请求参数校验功能实例演示 https://www.kuaiidc.com/111710.html

相关文章

发表评论
暂无评论