生活随笔
收集整理的這篇文章主要介紹了
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
=
1.創建實體
User.java
package com
.example
.demo
.entity
;
import lombok
.Data
;
import org
.hibernate
.validator
.constraints
.Length
;
import javax
.validation
.constraints
.*
;
import java
.io
.Serializable
;
@Data
public class User implements Serializable {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> {@Overridepublic void initialize(MyConstraint myConstraint
) {}@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(validatedBy
= MyConstraintValdator
.class)public @
interface MyConstraint {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 {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
;@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";}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验证表单数据和自定义验证的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。