Spring MVC-07循序渐进之验证器 下 (JSR 303验证)

网友投稿 537 2022-05-30

概述

JSR 303 Validator Demo

测试

总结

源码

概述

JSR303”Bean Validation” 和 JSR349 “Bean Validation 1.1”指定了一整套的API,通过标注对象属性添加约束。

当然了JSR 只是一个规范文档,目前有两个实现

hibernate Validator

Apache BVal (仅实现了JSR303)

这里我们使用 Hibernate Validator来演示

JSR303 不需要编写验证器,但是要利用JSR30标注类型嵌入约束.

JSR 303约束如下

一旦了解了JSR303 validation的使用方法,使用起来比Spring验证器还要容易。 同使用Spring验证器一样,同样可以在属性文件中以下列格式使用property键来覆盖来自JSR303验证器的错误消息

constraint.object.property

1

JSR 303 Validator Demo

同Spring Validator不同在于,它没有ProductValidator类,其次,需要添加Maven依赖

org.hibernate hibernate-validator 5.4.1.Final

1

2

3

4

5

Product 类中标注了JSR 303注解

package com.artisan.domain; import java.io.Serializable; import java.util.Date; import javax.validation.constraints.NotNull; import javax.validation.constraints.Past; import javax.validation.constraints.Size; public class Product implements Serializable { private static final long serialVersionUID = -5379168879247929742L; @Size(min=1,max=10) private String name; private String description; private float price; @NotNull @Past private Date productionDate; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } public Date getProductionDate() { return productionDate; } public void setProductionDate(Date productionDate) { this.productionDate = productionDate; } }

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

Spring MVC-07循序渐进之验证器 下 (JSR 303验证)

49

50

51

52

53

54

55

56

57

58

在Productcontroller类的productSave方法中,必须用@Valid对Product参数进行标注

package com.artisan.controller; import javax.validation.Valid; import org.apache.log4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.artisan.domain.Product; @Controller @RequestMapping(value = "/product") public class ProductController { private static final Logger logger = Logger.getLogger(ProductController.class); @RequestMapping(value = "/product_input", method = RequestMethod.GET) public String productInput(Model model) { model.addAttribute("product", new Product()); return "ProductForm"; } /** * * @Title: productSave * @Description: 标注了@Valid 对product进行校验 * @param @param product * @param @param bindingResult * @param @param model * @param @return 参数 * @return String 返回类型 * @throws */ @RequestMapping(value = "/product_save", method = RequestMethod.POST) public String productSave(@Valid @ModelAttribute Product product, BindingResult bindingResult, Model model) { // 校验 if (bindingResult.hasErrors()) { FieldError fieldError = bindingResult.getFieldError(); logger.info("Code:" + fieldError.getCode() + " ,field:" + fieldError.getField()); return "ProductForm"; } // simulate save product here model.addAttribute("product", product); model.addAttribute("message", "add successfully"); return "ProductView"; } }

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

为了定制来自验证器的错误消息,要在messages.properties文件中使用两个键

Size.product.name=Product name must be in 1 to 10 characters long Past.product.productionDate=Production date must a past date NotNull.product.productionDate=Production date must not be null

1

2

3

测试

什么都不输入

输入一个将来的时间

可见JSR 303 验证起了作用。

总结

由于JSR 303是正式的Java规范,因此建议新的项目使用JSR 303 验证器

源码

代码已提交到github

https://github.com/yangshangwei/SpringMvcTutorialArtisan

MVC Spring

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Gson-更新中
下一篇:Java--Servlet MultipartRequest实现上传文件
相关文章