Spring MVC-07循序漸進之驗證器 下 (JSR 303驗證)

      網友投稿 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依賴

      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

      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

      Spring MVC-07循序漸進之驗證器 下 (JSR 303驗證)

      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小時內刪除侵權內容。

      上一篇:excel小寫金額怎么轉大寫
      下一篇:Excel怎樣使用countif函數
      相關文章
      亚洲综合图色40p| 亚洲成在人线电影天堂色| 亚洲色图视频在线观看| 久久久久亚洲精品美女| 亚洲人成中文字幕在线观看| 国产亚洲情侣一区二区无| 亚洲午夜av影院| 麻豆亚洲AV成人无码久久精品 | 亚洲av综合av一区二区三区| 中文字幕亚洲男人的天堂网络| 亚洲国产午夜精品理论片| 亚洲国产精品白丝在线观看| 亚洲天堂一区二区三区四区| 亚洲一区二区三区91| 亚洲AV一二三区成人影片| 亚洲中文字幕一二三四区苍井空 | 亚洲人成色77777在线观看大 | 亚洲国模精品一区| 久久久久亚洲av成人无码电影| 亚洲综合精品网站在线观看| 国产中文在线亚洲精品官网| 国产啪亚洲国产精品无码 | 亚洲福利视频一区二区三区| 亚洲国产精品成人综合久久久| 亚洲国产韩国一区二区| 亚洲一区二区三区久久| 亚洲精华国产精华精华液好用| 国产精品亚洲lv粉色| 亚洲精品动漫人成3d在线| 国产亚洲一区二区三区在线不卡| 国产精品亚洲mnbav网站| 亚洲精品无码午夜福利中文字幕| 亚洲成a人片在线观看无码| 亚洲高清无在码在线无弹窗| avtt天堂网手机版亚洲| 亚洲国产精品无码久久98| 亚洲第一页日韩专区| 亚洲码国产精品高潮在线| 久久久久亚洲av无码专区导航| 亚洲精品mv在线观看 | 亚洲熟女少妇一区二区|