javascript
Spring MVC-07循序渐进之验证器 下 (JSR 303验证)
- 概述
- 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約束如下
| @AssertFalse | 用于boolean屬性,必須為false |
| @AssertTrue | 用于boolean屬性,必須為true |
| @DecimalMax(value) | 該屬性值必須為一個不大于指定值的小數 |
| @DecimalMin(value) | 該屬性值必須為一個不小于指定值的小數 |
| @Digits | 該屬性值必須在指定的范圍內, integer屬性定義該數字的最大整數部分,fraction屬性定義該數值的最大小數部分 |
| @Future | 該屬性值必須是未來的一個日期 |
| @Max | 該屬性值必須是一個小于或者等于指定值的整數 |
| @Min | 該屬性值必須為大于或者等于指定值的整數 |
| @NotNull | 該屬性值不能為null |
| @Null | 該屬性值必須為null |
| @Past | 該屬性值必須是過去的一個日期 |
| @Pattern | 該屬性值必須與指定的常規表但是相匹配 |
| @Size | 該屬性值必須在指定范圍內 |
| ….等 | … |
一旦了解了JSR303 validation的使用方法,使用起來比Spring驗證器還要容易。 同使用Spring驗證器一樣,同樣可以在屬性文件中以下列格式使用property鍵來覆蓋來自JSR303驗證器的錯誤消息
constraint.object.propertyJSR 303 Validator Demo
同Spring Validator不同在于,它沒有ProductValidator類,其次,需要添加Maven依賴
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.4.1.Final</version> </dependency>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@Pastprivate 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;}}在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 heremodel.addAttribute("product", product);model.addAttribute("message", "add successfully");return "ProductView";}}為了定制來自驗證器的錯誤消息,要在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測試
什么都不輸入
輸入一個將來的時間
可見JSR 303 驗證起了作用。
總結
由于JSR 303是正式的Java規范,因此建議新的項目使用JSR 303 驗證器
源碼
代碼已提交到github
https://github.com/yangshangwei/SpringMvcTutorialArtisan
總結
以上是生活随笔為你收集整理的Spring MVC-07循序渐进之验证器 下 (JSR 303验证)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring MVC-05循序渐进之数据
- 下一篇: Spring MVC-08循序渐进之国际