日韩性视频-久久久蜜桃-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验证表单数据和自定义验证的全部內容,希望文章能夠幫你解決所遇到的問題。

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