Android中的Serializable、Parcelable">Android中的Serializable、Parcelable
676
2025-04-02
概述
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依賴
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
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小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。