Spring自帶的校驗(yàn)框架Validation的使用實(shí)例
1.首先來一個項(xiàng)目結(jié)構(gòu)圖以及所需jar包


可以看到,沒有添加除了日志和jstl相關(guān)的jar包外,沒有其他spring以外的第三方j(luò)ar包(即使用的是spring自帶的校驗(yàn)框架)。
2.從前臺頁面開始,首先是接收用戶信息的表單loginForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>測試validator接口驗(yàn)證</title> </head> <body> <h3>登錄頁</h3> <!-- 綁定user --> <form:form modelAttribute="user" method="post" action="login"> <table> <tr> <td>登錄名:</td> <td><form:input path="loginname"/></td> <!-- 使用form:errors標(biāo)簽 顯示loginname屬性的錯誤信息 --> <td><form:errors path="loginname" cssStyle="color:red"/></td> </tr> <tr> <td>密碼:</td> <td><form:input path="password"/></td> <!-- 使用form:errors標(biāo)簽 顯示password屬性的錯誤信息 --> <td><form:errors path="password" cssStyle="color:red"/></td> </tr> <tr> <td><input type="submit"></td> </tr> </table> </form:form> </body> </html>
3.實(shí)體類User.java
public class User {
private String loginname;
private String password;
//省略set和get方法…
}
4.控制器UserController.java
@Controller
public class UserController {
//注入UserValidator對象
@Autowired
@Qualifier("userValidator")
private UserValidator userValidator;
@RequestMapping(value="/{formName}")
public String loginForm(
@PathVariable String formName,Model model){
User user = new User();
model.addAttribute("user", user);
// 動態(tài)跳轉(zhuǎn)頁面
return formName;
}
@RequestMapping(value="/login", method=RequestMethod.POST)
public String login(@ModelAttribute User user,Model model,Errors errors){
model.addAttribute("user", user);
//調(diào)用userValidator的驗(yàn)證方法
userValidator.validate(user, errors);
//如果驗(yàn)證不通過跳轉(zhuǎn)到loginForm視圖
if(errors.hasErrors()){
return "loginForm";
}
return "success";
}
}
5.校驗(yàn)器UserValidator.java
//實(shí)現(xiàn)Spring的Validator接口
@Repository("userValidator")
public class UserValidator implements Validator{
//該校驗(yàn)器能夠?qū)lazz類型的對象進(jìn)行校驗(yàn)
public boolean supports(Class<?> clazz) {
//User指定的class參數(shù)所表示的類或接口是否相同,或是否是其超類的超接口
return User.class.isAssignableFrom(clazz);
}
//對目標(biāo)類target進(jìn)行校驗(yàn),并將校驗(yàn)錯誤記錄在errors中
public void validate(Object target, Errors errors) {
/**
*使用ValidationUtils中的一個靜態(tài)方法rejectIfEmpty()來對
*loginname屬性進(jìn)行校驗(yàn),假若‘loginname'屬性是null或者空字符
*串的話,就拒絕驗(yàn)證通過。
*/
ValidationUtils.rejectIfEmpty(errors, "loginname", null,"登錄名不能為空");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", null,"密碼不能為空");
User user = (User) target;
if(user.getLoginname().length() > 10){
//使用Errors的rejectValue方法驗(yàn)證
errors.rejectValue("loginname", null, "用戶名不能超過10個字符");
}
if(user.getPassword() != null && !user.getPassword().equals("")
&& user.getPassword().length() <6){
errors.rejectValue("password", null, "密碼不能小于6位");
}
}
}
6.spring的配置文件和web.xml的配置文件略……
小結(jié):
第一遍敲這個代碼的時候,有著各種各樣的小問題出現(xiàn),比較多的就是 類所對應(yīng)的路徑要import對,因?yàn)椴煌陌锌赡軙邢嗤值念?,而此時一不小心就會導(dǎo)錯了包,會給后面的編寫代碼帶來不必要的麻煩。昨天的時候就調(diào)試這個小小的demo就花了好久的時間,后來也沒再去管,然后今天有空了又重新敲了一遍代碼,發(fā)現(xiàn)沒有問題,直接一次就通過了,然后去對比昨天的代碼發(fā)現(xiàn),是我在第一遍敲代碼的時候把實(shí)體類的get和set方法的名字敲錯了(追溯起來的話是寫屬性的時候把屬性名敲錯了,然后get和set方法是自動生成的,后面去修改屬性時導(dǎo)致沒有將相應(yīng)的set和get方法改正),哎,,,還是太粗心
ok,然后就是啟動服務(wù)器運(yùn)行程序…


總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
IDEA通過git回滾到某個提交節(jié)點(diǎn)或某個版本的操作方法
這篇文章主要介紹了IDEA通過git回滾到某個提交節(jié)點(diǎn)或某個版本的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
Linux配置jdk1.8與jdk17兼容并存并啟動jar包指定jdk版本
JDK是Java語言的軟件開發(fā)工具包,主要用于移動設(shè)備、嵌入式設(shè)備上的java應(yīng)用程序,這篇文章主要給大家介紹了關(guān)于Linux配置jdk1.8與jdk17兼容并存并啟動jar包指定jdk版本的相關(guān)資料,需要的朋友可以參考下2024-08-08
SpringBoot使用Validation包進(jìn)行輸入?yún)?shù)校驗(yàn)
Spring Boot 自帶的 spring-boot-starter-validation 包支持以標(biāo)準(zhǔn)注解的方式進(jìn)行輸入?yún)?shù)校驗(yàn),本文即關(guān)注 spring-boot-starter-validation 包所涵蓋的標(biāo)準(zhǔn)注解的使用、校驗(yàn)異常的捕獲與展示、分組校驗(yàn)功能的使用,以及自定義校驗(yàn)器的使用,需要的朋友可以參考下2024-05-05
Java fastjson解析json字符串實(shí)現(xiàn)過程解析
這篇文章主要介紹了Java fastjson解析json字符串實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10
springboot @ComponentScan注解原理解析
這篇文章主要介紹了springboot @ComponentScan注解原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02

