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

歡迎訪問 生活随笔!

生活随笔

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

javascript

Springboot验证表单数据和自定义验证

發布時間:2025/4/5 javascript 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Springboot验证表单数据和自定义验证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

驗證表單

實驗結果


項目結構目錄如下

0.添加依賴

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>

0.設置路徑
application.properties文件

spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html spring.thymeleaf.servlet.content-type=text/html spring.thymeleaf.encoding=utf-8 spring.thymeleaf.mode=LEGACYHTML5 spring.thymeleaf.cache=false spring.mvc.static-path-pattern=/** spring.resources.static-locations=classpath:/static/

1.創建實體
User.java

package com.example.demo.entity; import lombok.Data; import org.hibernate.validator.constraints.Length; //import hibernate.validator.constraints.Length; import javax.validation.constraints.*; import java.io.Serializable; @Data public class User implements Serializable {/*** 主鍵:id* */private Long id;@NotBlank(message = "用戶名不能為空")@Length(min=5,max=20,message = "用戶名長度為5-20個字符")private String name;@NotNull(message = "年齡不能為空")@Min(value=18,message = "最小18歲")@Max(value=60,message = "最大60歲")private Integer age;@Email(message = "請輸入郵箱")@NotBlank(message = "郵箱不能為空")private String email;}

2.編寫驗證控制器
用于綁定數據驗證
TestValidator.java

package com.example.demo.controller; import com.example.demo.entity.User; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import javax.validation.Valid; @Controller public class TestValidator {@GetMapping("/test")public String showForm(User user){return "form";}@GetMapping("/results")public String results(){return "results";}@PostMapping("/test")public String checkUser(@Valid User user,BindingResult bindingResult,RedirectAttributes attr){if(bindingResult.hasErrors()){return "form";}attr.addFlashAttribute("user",user);return "redirect:/results";} }

3.編寫視圖
form.html

<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <body> <style type="text/css">.warn{color:red} </style> <form th:action="@{/test}" th:object="${user}" method="post"><div><div><span>姓名:</span><span><input type="text" th:field="*{name}"/></span><span class="warn" th:if="${#fields.hasErrors('name')}" th:errors="*{name}">名字錯誤</span></div><div><span>年齡:</span><span><input type="number" th:field="*{age}"/></span><span class="warn" th:if="${#fields.hasErrors('age')}" th:errors="*{age}">年齡錯誤</span></div><div><span>郵箱:</span><span><input TYPE="text" th:field="*{email}"/></span><span class="warn" th:if="${#fields.hasErrors('email')}" th:errors="*{email}">郵箱錯誤</span></div><div><span><button type="submit">提交</button></span></div></div> </form> </body> </html>

results.html

如果驗證成功,使用本視圖進行渲染數據;如果驗證失敗,返回表單提示錯誤

<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <body> <div th:each="user:${user}">恭喜您,<span th:text="${user.name}">名字</span>(先生/女士),數據提交成功!<div>您的年齡是:<span th:text="${user.age}"></span></div><div>您的郵箱是:<span th:text="${user.email}"></span></div> </div></body> </html>

4.運行項目
打開http://localhost:8080/test

自定義驗證

實驗結果


項目結構

application.properties文件

spring.thymeleaf.mode=HTML spring.thymeleaf.cache=false

1.自定義注解類
MyConstraintValdator.java

package com.example;import com.example.demo.MyConstraint;import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext;public class MyConstraintValdator implements ConstraintValidator<MyConstraint, String> {//String為校驗的類型@Overridepublic void initialize(MyConstraint myConstraint) {//啟動時執行}/*** @ Description: 自定義校驗邏輯*/@Overridepublic boolean isValid(String s, ConstraintValidatorContext validatorContext) {if (!(s.equals("北京") || s.equals("上海"))) {return false;}return true;} }

2.自定義驗證業務邏輯類
有兩個方法:initialize和isValid
MyConstraint .java

package com.example.demo; import com.example.MyConstraintValdator; import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; //限定使用范圍:只能在字段上使用 @Target({ElementType.FIELD}) //表明注解的生命周期,它在代碼運行時可以通過反射獲取到注解 @Retention(RetentionPolicy.RUNTIME) //@Constraint 注解,里面傳入一個validateBy字段,以指定該注解的校驗邏輯 @Constraint(validatedBy= MyConstraintValdator.class)public @interface MyConstraint {/*** @ Description:錯誤提示* */String message() default "請輸入中國政治中心或經濟中心的城市名";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {}; }

3.創建實體
User.java

package com.example.demo.entity;import com.example.demo.MyConstraint; import lombok.Data; import org.hibernate.validator.constraints.Length;import javax.validation.constraints.*; import java.io.Serializable;@Data public class User implements Serializable {/*** 主鍵ID*/private Long id;@NotBlank(message = "用戶名不能為空")@Length(min = 5, max = 20, message = "用戶名長度為5-20個字符")private String name;@NotNull(message = "年齡不能為空")@Min(value = 18 ,message = "最小18歲")@Max(value = 60,message = "最大60歲")private Integer age;/* @NotBlank(message = "電話不可以為空")@Length(min = 1, max = 13, message = "電話長度需要在13個字符以內")private String phone;*/@Email(message = "請輸入郵箱")@NotBlank(message = "郵箱不能為空")private String email;/* @NotNull(message = "必須指定用戶狀態")@Min(value = 0, message = "用戶狀態不合法")@Max(value = 1, message = "用戶狀態不合法")private Integer status;*/@MyConstraintprivate String answer;}

4.編寫驗證控制器
TestValidator.java

package com.example.demo.controller;import com.example.demo.entity.User; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.servlet.mvc.support.RedirectAttributes;import javax.validation.Valid;@Controller public class TestValidator {@GetMapping("/test")public String showForm(User user) {return "form";}@GetMapping("/results")public String results() {return "results";}@PostMapping("/test")public String checkUser(@Valid User user, BindingResult bindingResult, RedirectAttributes attr) {if (bindingResult.hasErrors()) {return "form";}/*** @ Description:* 1.使用RedirectAttributes的addAttribute方法傳遞參數會跟隨在URL后面 ,如上代碼即為?name=long&age=45* 2.使用addFlashAttribute不會跟隨在URL后面,會把該參數值暫時保存于session,待重定向url獲取該參數后從session中移除,* 這里的redirect必須是方法映射路徑。你會發現redirect后的值只會出現一次,刷新后不會出現了,對于重復提交可以使用此來完成。*/attr.addFlashAttribute("user", user);return "redirect:/results";} }

5.視圖文件
form.html

<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <body> <style type="text/css">.warn{color:red} </style> <form th:action="@{/test}" th:object="${user}" method="post"><div><div><span>姓名:</span><span><input type="text" th:field="*{name}"/></span><span class="warn" th:if="${#fields.hasErrors('name')}" th:errors="*{name}">名字錯誤</span></div><div><span>年齡:</span><span><input type="number" th:field="*{age}"/></span><span class="warn" th:if="${#fields.hasErrors('age')}" th:errors="*{age}">年齡錯誤</span></div><div><span>郵箱:</span><span><input TYPE="text" th:field="*{email}"/></span><span class="warn" th:if="${#fields.hasErrors('email')}" th:errors="*{email}">郵箱錯誤</span></div><div><span>驗證答案:</span><span><input TYPE="text" th:field="*{answer}"/></span><span class="warn" th:if="${#fields.hasErrors('answer')}" th:errors="*{answer}">答案錯誤</span></div><div><span><button type="submit">提交</button></span></div></div> </form> </body> </html>

results.html
和上面無異

<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"> <body> <div th:each="user: ${user}">恭喜您,<span th:text="${user.name}">名字</span>(先生/女士),數據提交成功!<div>您的年齡是:<span th:text="${user.age}"></span></div><div> 您的郵箱是:<span th:text="${user.email}"></span></div> </div></body> </html>

依賴如下

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>

由于SpringBoot使用的是2.3,此時需要手動添加validation的依賴。

總結

以上是生活随笔為你收集整理的Springboot验证表单数据和自定义验证的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲熟女乱综合一区二区三区 | 日本黄色网络 | 色无极亚洲影院 | 蜜桃在线一区二区三区 | 久久久96人妻无码精品 | 激情网五月 | 国内自拍99 | 黄片毛片在线 | 乱视频在线观看 | av漫画在线观看 | 性色av免费观看 | 一级片成人 | 欧美日韩一卡 | 亚洲国产高清视频 | 99在线观看 | 樱花影院最新免费观看攻略 | 日韩美女国产精品 | 都市激情麻豆 | 国产精品无码av在线有声小说 | 涩涩成人 | 国产精品久久久久国产a级 国产一区二区在线播放 | 欧美日韩另类一区 | 欧美视频在线不卡 | 美女被男人桶出白浆喷水 | 久久丫精品国产亚洲av不卡 | 亚洲色视频 | 老局长的粗大高h | 欧美性生活网站 | 中文字幕丰满乱子伦无码专区 | 国产裸体美女永久免费无遮挡 | 鲁一鲁在线 | 香蕉中文网 | 久久99精品久久久久久琪琪 | 色xxxxxx| 我的邻居在线观看 | 狠狠插狠狠干 | 天天躁日日躁bbbbb | 香蕉国产精品视频 | 国产美女福利 | 欧美黑人性猛交xxxx | 国产精品二区在线 | 成人午夜在线 | 青草视屏 | 一本综合久久 | 日b影院 | 顶级嫩模啪啪呻吟不断好爽 | 国产情侣久久 | 俄罗斯av在线 | a级片视频网站 | 在线观看欧美 | 国产精品一区二区三区在线 | 久久综合av | 丰满人妻熟妇乱偷人无码 | 精品无码一区二区三区的天堂 | 久久久久久久9 | 久久久男女 | 欧美日韩视频一区二区 | 精品国产aⅴ一区二区三区东京热 | 欧美一区二区三区观看 | 成人教育av | 欧美成人激情视频 | 国产第9页 | 精品国产一区二区三区性色 | 91麻豆影视 | 久久综合久久久久 | 亚洲综合三区 | 亚洲一区有码 | 精品国产系列 | 夜夜操天天干 | 免费一区二区 | 在线视频 一区二区 | 欧美成人一区二区视频 | 后入内射欧美99二区视频 | 第一页在线 | 人人妻人人澡人人爽人人精品 | 国产爆操视频 | 亚洲不卡中文字幕无码 | 一级大片在线观看 | 中文字幕免费在线观看 | 亚洲视频免费观看 | 日韩精品一区二区三区av | 日韩人妻无码精品久久久不卡 | 亚洲三级理论 | 日韩专区一区二区三区 | 日本在线视频观看 | 欧美老女人性生活视频 | 国产91福利 | 久草视频这里只有精品 | 看黄色a级片| 中国人妖和人妖做爰 | a视频在线 | 波多野结衣免费看 | 毛片毛片女人毛片毛片 | 五月天堂网 | 牛牛影视免费观看 | 国产视频一区在线 | 欧美一区二区三区久久妖精 | 在线免费91 | 蜜桃视频色 |