日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring mvc服務端數據校驗實現流程詳解

瀏覽:19日期:2023-08-12 15:55:35

B/S 系統中對http 請求數據的校驗多數在客戶端進行,這也是出于簡單及用戶體驗性上考慮,但是在一些安全性要求高的系統中服務端校驗是不可缺少的,實際上,幾乎所有的系統,凡是涉及到數據校驗,都需要在服務端進行二次校驗。為什么要在服務端進行二次校驗呢?這需要理解客戶端校驗和服務端校驗各自的目的。

客戶端校驗,我們主要是為了提高用戶體驗,例如用戶輸入一個郵箱地址,要校驗這個郵箱地址是否合法,沒有必要發送到服務端進行校驗,直接在前端用 js 進行校驗即可。但是大家需要明白的是,前端校驗無法代替后端校驗,前端校驗可以有效的提高用戶體驗,但是無法確保數據完整性,因為在 B/S 架構中,用戶可以方便的拿到請求地址,然后直接發送請求,傳遞非法參數。服務端校驗,雖然用戶體驗不好,但是可以有效的保證數據安全與完整性。綜上,實際項目中,兩個一起用。

Spring 支持JSR-303 驗證框架,JSR-303 是 JAVA EE 6 中的一項子規范,叫做 Bean Validation,官方參考實現是 Hibernate Validator(與Hibernate ORM 沒有關系),JSR-303 用于對 Java Bean 中的字段的值進行驗證。

普通校驗

普通校驗,是這里最基本的用法。

首先,我們需要加入校驗需要的依賴:

<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.1.0.Final</version></dependency>

接下來,在 SpringMVC 的配置文件中配置校驗的 Bean:

<bean id='validatorFactoryBean'> <property name='providerClass' value='org.hibernate.validator.HibernateValidator'/></bean><mvc:annotation-driven validator='validatorFactoryBean'/>

配置時,提供一個 LocalValidatorFactoryBean 的實例,然后 Bean 的校驗使用 HibernateValidator。

這樣,配置就算完成了。

接下來,我們提供一個添加學生的頁面:

<form action='/addstudent' method='post'> <table> <tr> <td>學生編號:</td> <td><input type='text' name='id'></td> </tr> <tr> <td>學生姓名:</td> <td><input type='text' name='name'></td> </tr> <tr> <td>學生郵箱:</td> <td><input type='text' name='email'></td> </tr> <tr> <td>學生年齡:</td> <td><input type='text' name='age'></td> </tr> <tr> <td colspan='2'><input type='submit' value='提交'> </td> </tr> </table></form>

在這里需要提交的數據中,假設學生編號不能為空,學生姓名長度不能超過 10 且不能為空,郵箱地址要合法,年齡不能超過 150。那么在定義實體類的時候,就可以加入這個判斷條件了。

public class Student { @NotNull private Integer id; @NotNull @Size(min = 2,max = 10) private String name; @Email private String email; @Max(150) private Integer age;...}

在這里:

@NotNull 表示這個字段不能為空 @Size 中描述了這個字符串長度的限制 @Email 表示這個字段的值必須是一個郵箱地址 @Max 表示這個字段的最大值

定義完成后,接下來,在 Controller 中定義接口:

@Controllerpublic class StudentController { @RequestMapping('/addstudent') @ResponseBody public void addStudent(@Validated Student student, BindingResult result) { if (result != null) { //校驗未通過,獲取所有的異常信息并展示出來 List<ObjectError> allErrors = result.getAllErrors(); for (ObjectError allError : allErrors) {System.out.println(allError.getObjectName()+':'+allError.getDefaultMessage()); } } }}

在這里:

@Validated 表示 Student 中定義的校驗規則將會生效 BindingResult 表示出錯信息,如果這個變量不為空,表示有錯誤,否則校驗通過。

接下來就可以啟動項目了。訪問 jsp 頁面,然后添加 Student,查看校驗規則是否生效。

默認情況下,打印出來的錯誤信息時系統默認的錯誤信息,這個錯誤信息,我們也可以自定義。自定義方式如下:

由于 properties 文件中的中文會亂碼,所以需要我們先修改一下 IDEA 配置,點File?>Settings->Editor?>File Encodings,如下:

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6901df99-8a2e-418b-b791-77cff9fc1bb7/Untitled.png

然后定義錯誤提示文本,在 resources 目錄下新建一個 MyMessage.properties 文件,內容如下:

student.id.notnull=id 不能為空student.name.notnull=name不能為空student.name.length=name最小長度為 2 ,最大長度為10student.email.error=email地址非法student.age.error=年齡不能超過 150

接下來,在 SpringMVC 配置中,加載這個配置文件:

<bean id='validatorFactoryBean'> <property name='providerClass' value='org.hibernate.validator.HibernateValidator'/> <property name='validationMessageSource' ref='bundleMessageSource'/></bean><bean id='bundleMessageSource'> <property name='basenames'> <list> <value>classpath:MyMessage</value> </list> </property> <property name='defaultEncoding' value='UTF-8'/> <property name='cacheSeconds' value='300'/></bean><mvc:annotation-driven validator='validatorFactoryBean'/>

最后,在實體類上,加上校驗出錯時的消息

public class Student { @NotNull(message = '{student.id.notnull}') private Integer id; @NotNull(message = '{student.name.notnull}') @Size(min = 2,max = 10,message = '{student.name.length}') private String name; @Email(message = '{student.email.error}') private String email; @Max(value = 150,message = '{student.age.error}') private Integer age;...}

配置完成后,如果校驗再出錯,就會展示我們自己的出錯信息了。

分組校驗

由于校驗規則都是定義在實體類上面的,但是,在不同的數據提交環境下,校驗規則可能不一樣。例如,用戶的 id 是自增長的,添加的時候,可以不用傳遞用戶 id,但是修改的時候則必須傳遞用戶 id,這種情況下,就需要使用分組校驗。

分組校驗,首先需要定義校驗組,所謂的校驗組,其實就是空接口:

public interface ValidationGroup1 {}public interface ValidationGroup2 {}

然后,在實體類中,指定每一個校驗規則所屬的組:

public class Student { @NotNull(message = '{student.id.notnull}',groups = ValidationGroup1.class) private Integer id; @NotNull(message = '{student.name.notnull}',groups = {ValidationGroup1.class, ValidationGroup2.class}) @Size(min = 2,max = 10,message = '{student.name.length}',groups = {ValidationGroup1.class, ValidationGroup2.class}) private String name; @Email(message = '{student.email.error}',groups = {ValidationGroup1.class, ValidationGroup2.class}) private String email; @Max(value = 150,message = '{student.age.error}',groups = {ValidationGroup2.class}) private Integer age;...}

在 group 中指定每一個校驗規則所屬的組,一個規則可以屬于一個組,也可以屬于多個組。

最后,在接收參數的地方,指定校驗組:

@Controllerpublic class StudentController { @RequestMapping('/addstudent') @ResponseBody public void addStudent(@Validated(ValidationGroup2.class) Student student, BindingResult result) { if (result != null) { //校驗未通過,獲取所有的異常信息并展示出來 List<ObjectError> allErrors = result.getAllErrors(); for (ObjectError allError : allErrors) {System.out.println(allError.getObjectName()+':'+allError.getDefaultMessage()); } } }}

配置完成后,屬于 ValidationGroup2 這個組的校驗規則,才會生效。

校驗注解

@Null 被注解的元素必須為 null

@NotNull 被注解的元素必須不為 null

@AssertTrue 被注解的元素必須為 true

@AssertFalse 被注解的元素必須為 false

@Min(value) 被注解的元素必須是一個數字,其值必須大于等于指定的最小值

@Max(value) 被注解的元素必須是一個數字,其值必須小于等于指定的最大值

@DecimalMin(value) 被注解的元素必須是一個數字,其值必須大于等于指定的最小值

@DecimalMax(value) 被注解的元素必須是一個數字,其值必須小于等于指定的最大值

@Size(max=, min=) 被注解的元素的大小必須在指定的范圍內

@Digits (integer, fraction) 被注解的元素必須是一個數字,其值必須在可接受的范圍內

@Past 被注解的元素必須是一個過去的日期

@Future 被注解的元素必須是一個將來的日期

@Pattern(regex=,flag=) 被注解的元素必須符合指定的正則表達式

@NotBlank(message =) 驗證字符串非 null,且長度必須大于0

@Email 被注解的元素必須是電子郵箱地址

@Length(min=,max=) 被注解的字符串的大小必須在指定的范圍內

@NotEmpty 被注解的字符串的必須非空

@Range(min=,max=,message=) 被注解的元素必須在合適的范圍內

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品视频一区二区三区综合| 日本在线不卡视频| 婷婷亚洲综合| 国产一区国产二区国产三区| 青青草精品视频| 日韩在线a电影| 99国产精品私拍| av不卡在线| 在线综合欧美| 午夜欧美在线| 婷婷精品在线| 亚洲精品三级| 国产精品亲子伦av一区二区三区 | 亚洲国产成人精品女人| 激情国产在线| 国内精品福利| 亚洲色诱最新| 热久久免费视频| 日韩精品电影一区亚洲| 久久狠狠久久| 久久精品三级| 亚洲黄色免费av| re久久精品视频| 免费视频久久| 久久狠狠亚洲综合| 精品日韩一区| 欧美日韩免费看片| 久久精品91| 三级欧美韩日大片在线看| 欧美一区二区三区久久| 国产精成人品2018| 免费av一区| 天堂精品久久久久| 久久精品一区二区国产| 亚洲精品在线影院| 国产综合视频| 欧美极品中文字幕| 亚洲韩日在线| 国产欧美综合一区二区三区| 天堂а√在线最新版中文在线| 亚洲欧洲美洲av| 亚洲一区激情| 97视频热人人精品免费| 日韩精品一区二区三区免费视频| 成人国产精品久久| 蜜臀久久久久久久| 久久青青视频| 国产精品免费不| 在线精品视频一区| 亚洲91精品| 在线天堂中文资源最新版| 日韩精品一级中文字幕精品视频免费观看| 久久wwww| 国产日韩欧美一区在线| 黄页网站一区| 精品视频在线你懂得| 欧美伊人影院| 合欧美一区二区三区| 日韩欧美一区免费| 国产福利一区二区精品秒拍 | 久久99久久久精品欧美| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲综合在线电影| 日韩av免费大片| 久久97久久97精品免视看秋霞| 亚州欧美在线| 亚洲精品伊人| 天堂久久av| 国产精品普通话对白| 在线观看精品| 亚洲福利国产| 免费久久久久久久久| 伊人久久高清| 成人在线网站| 日韩在线欧美| 日本久久成人网| 国产精品国产三级国产在线观看| 九九久久国产| 国产一区二区三区四区大秀| 精品视频一二| 日韩在线短视频| 久久精品官网| 欧美午夜不卡| 久久精品欧美一区| 欧美日韩四区| 亚洲一区有码| 青青国产91久久久久久| 国产精品天天看天天狠| 高清在线一区| 午夜av成人| 亚洲一区欧美激情| 国产精品xxx| 色一区二区三区| 亚洲一区二区三区四区电影| 国产精品中文字幕制服诱惑| 四虎成人av| 综合色一区二区| 国产欧美一区二区三区精品观看| 欧美日韩1区| 一区二区精品伦理...| 99香蕉国产精品偷在线观看 | 麻豆久久一区| 亚洲高清影视| 国产欧美日韩综合一区在线播放| 国模大尺度视频一区二区| 久久国产成人午夜av影院宅| 综合激情视频| 精品日韩一区| 日本成人在线视频网站| 欧美少妇精品| 91欧美极品| 亚洲天堂久久| 欧美黄页在线免费观看| 亚洲欧美日本视频在线观看| 国产精品久久久久久久久久久久久久久 | 久久97视频| 免费看欧美美女黄的网站| 国产精品地址| 性一交一乱一区二区洋洋av| 鲁鲁在线中文| 国产精品igao视频网网址不卡日韩| 午夜视频精品| 免费观看久久av| 亚洲日本网址| 欧美国产另类| 欧美在线日韩| 久久成人亚洲| 久久精品国产www456c0m| 精品国产三区在线| 国产免费av国片精品草莓男男| 日韩中文字幕不卡| 99久久亚洲精品| 国产乱码精品| 日韩成人av影视| 亚洲精品在线二区| 蜜臀久久99精品久久久久宅男| 极品裸体白嫩激情啪啪国产精品| 国产精品yjizz视频网| 成人国产精品久久| 精品国产第一福利网站| 日韩毛片视频| 久久国产影院| 91精品99| 麻豆亚洲精品| 亚洲综合小说| 日本午夜精品久久久久| 青青草91视频| 国产欧美一区二区三区米奇| 国产精品久久久久久久久久齐齐 | 国产精品地址| 成人国产精品久久| 成人自拍av| 激情综合网站| 天海翼精品一区二区三区| 日韩精品一区二区三区中文字幕| 欧美日韩黄网站| 精品久久精品| 色婷婷久久久| 日av在线不卡| 欧美极品一区二区三区| 日本精品在线中文字幕| 三级欧美在线一区| 国产精品久久久久久久久久齐齐| 三上悠亚国产精品一区二区三区| 激情婷婷综合| 国产精品sm| 久久青草久久| 91精品在线免费视频| 日本在线精品| 日本在线视频一区二区| 国产一区二区三区探花| 蜜桃91丨九色丨蝌蚪91桃色| 欧美一区久久| 91精品观看| 国产精品一卡| 蜜桃av一区二区在线观看| 国内在线观看一区二区三区| 久久午夜视频| 99精品视频在线| 国产精品传媒麻豆hd| 亚洲成人精选| 成人国产精品| 日本成人精品| 亚洲精品va| 国产精品蜜芽在线观看| 欧美日韩一区二区三区不卡视频 | 亚洲精品少妇| 午夜欧美理论片| 免费看av不卡| 高清一区二区三区av| 国产欧美日韩综合一区在线播放| 午夜宅男久久久| 亚洲精品中文字幕乱码| 日韩电影在线视频| 欧美激情精品| 乱一区二区av| 91亚洲精品视频在线观看| 亚洲精品一二三**| 99亚洲视频| 丝袜美腿亚洲色图|