日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

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

發布時間:2025/3/21 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.property

JSR 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验证)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产片淫乱18一级毛片动态图 | 日韩国产一区 | 综合久久综合久久 | 影音先锋亚洲一区 | 日本免费看 | 久久综合区 | av老司机福利 | 在线看b | 欧美日韩国| 特大黑人巨人吊xxxx | 日韩伊人久久 | 国产主播在线一区 | 91视频成人免费 | 日韩精品成人一区 | 超碰在线人人 | 欧美极品一区二区 | 亚洲每日更新 | 亚洲高清视频在线播放 | 91在线综合 | 在线观看午夜 | 国产精品一页 | 俺也去在线视频 | 欧美性猛交富婆 | 91视频二区 | 亚欧洲精品在线视频免费观看 | a一级视频| 亚洲理伦 | 国产原创一区 | 成人a视频 | 久久精品1 | 97国产精东麻豆人妻电影 | 色精品视频 | 久久久久久久久久久久国产 | 久久久久无码国产精品 | 欧美一级黄色网 | 久久一本精品 | 成人免费在线观看 | 香蕉视频91| 欧美日韩在线一区 | 一区二区三区网 | 污网站免费在线 | 色偷偷91 | 日韩黄色一区二区 | 秋霞在线一区 | 成人1区2区3区 | 欧美日韩综合精品 | 国产后入又长又硬 | 久久久女人 | 最近日韩中文字幕 | 中文字幕欧美另类精品亚洲 | 欲色视频 | 国产伦理精品 | 成人看片在线观看 | 中国zzji女人高潮免费 | 色欲狠狠躁天天躁无码中文字幕 | 一级片在线播放 | 91久久精品日日躁夜夜躁国产 | 日韩三级在线免费观看 | 久久国产影院 | 久久99操 | 草莓视频一区二区三区 | 激情久久一区 | 中文在线字幕av | 色诱av手机版 | 成人手机在线观看 | 美女洗澡隐私免费网站 | 久久伊人影院 | 爱爱视频在线播放 | 一区二区三区人妻 | 国产无遮挡又黄又爽在线观看 | 一区二区三区视频 | 国产精品果冻传媒潘 | av无限看 | 视频在线观看免费 | 久久久久久91香蕉国产 | 久久国产乱| 国产区av| 五月婷婷丁香六月 | 日韩欧美无 | 日韩制服在线 | 日韩毛片在线免费观看 | 国产www精品 | 毛片1000部免费看 | a级片黄色 | 日本黄网站 | 欧美三区四区 | 亚洲av片不卡无码久久 | 18岁免费观看电视连续剧 | 欧美色图日韩 | 国产视频不卡一区 | 可以免费看污视频的网站 | 涩涩网址| 在线视频国产一区 | 九九99精品视频 | 亚洲精品大全 | 火影黄动漫免费网站 | 成人tv | 美女av一区二区 | 自拍偷拍20p|