本文提綱
一士袄、表單驗證實例
二鸟召、驗證注解說明
三怜校、最后
本文運行環(huán)境
Ubuntu 16.04 LTS
JDK 8 +
IntelliJ IDEA ULTIMATE 2017.2
Maven 3.5.0
Spring Boot 1.5.8.RELEASE
一、表單驗證實例
表單驗證鹰贵,即校驗用戶提交的數(shù)據(jù)的合理性晴氨,如是否為空,數(shù)據(jù)長度碉输,數(shù)據(jù)類型等等籽前,好的驗證,能防止垃圾數(shù)據(jù)的產(chǎn)生敷钾。
1.1 新建類實體類
package com.zyr.demo.domain;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class User {
@NotNull(message = "用戶名不能為空")
@Size(min = 1, message = "用戶名不能為空") //字符串必須有此注解枝哄,否則無法驗證傳的值
private String name;
@NotNull(message = "年齡不能為空")
@Min(value = 18, message = "必須是成年人")
private Integer age;
@NotNull(message = "密碼不能為空")
@Size(min = 6, max = 15, message = "密碼長度為6—15位")
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", password='" + password + '\'' +
'}';
}
}
1.2 新建Controller
package com.zyr.demo.controller;
import com.zyr.demo.domain.User;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
@RestController
public class UserController {
@PostMapping("/signUp") //POST請求方式
public String signUp(@Valid User user, BindingResult bindingResult) {
System.out.println("name=" + user.getName());
System.out.println("age=" + user.getAge());
System.out.println("password=" + user.getPassword());
if (bindingResult.hasErrors()) {
return bindingResult.getFieldError().getDefaultMessage();
}
return "success";
}
}
- 對
signUp
的POST
請求參數(shù)即為User
類中的字段名:name
,age
阻荒,password
挠锥。Spring Boot
會將其自動組合成User
實例; -
@Valid
:表示該參數(shù)需要進行驗證侨赡,驗證點即為上面User
類中的字段上的各注解蓖租; -
BindingResult
:此參數(shù)包含錯誤信息,即User
字段注解中的message
羊壹; -
signUp
方法打印請求參數(shù)的值蓖宦,若未通過驗證則返回錯誤信息,錯誤信息即User
類字段注解中的message
油猫,若驗證成功直接返回success
稠茂。
1.3 測試
新建測試類UserControllerTest
(此處未寫完所有測試用例):
package com.zyr.demo.controller;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testSignUp_success() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.post("/signUp")
.param("name", "Bob")
.param("age", "20")
.param("password", "123456"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("success"));
}
@Test
public void testSignUp_name_null() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.post("/signUp")
.param("name", "")
.param("age", "20")
.param("password", "123456"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("用戶名不能為空"));
}
@Test
public void testSignUp_age_error() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.post("/signUp")
.param("name", "Bob")
.param("age", "10")
.param("password", "123456"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("必須是成年人"));
}
}
運行測試用例,全部成功情妖,說明正確睬关。
二、驗證注解說明
除了上面User
類使用的注解鲫售,還有其它很多類型的注解:
注解 | 作用 |
---|---|
@AssertFalse |
驗證boolean 對象是否是false
|
@AssertTrue |
驗證boolean 對象是否是true
|
@DecimalMax |
驗證 Number 和 String 對象是否小等于指定的值共螺,小數(shù)存在精度 |
@DecimalMin |
驗證 Number 和 String 對象是否大等于指定的值,小數(shù)存在精度 |
@Digits |
驗證Number 和String 的構(gòu)成是否合法 |
@Past |
驗證Date 和Calendar 對象是否在當前時間之前 |
@Future |
驗證Date 和Calendar 對象是否在當前時間之后 |
@Max |
驗證Number 和String 對象是否小等于指定的值 |
@Min |
驗證Number 和String 對象是否小等于指定的值 |
@NotNull |
驗證對象不為空 |
@Null |
驗證對象為空 |
@Pattern |
驗證String 對象是否符合正則表達式的規(guī)則 |
@Size |
驗證對象(Array ,Collection ,Map ,String )長度是否在給定的范圍之內(nèi) |
三情竹、最后
本文介紹了Spring Boot
是如何使用注解,就能方便的進行表單驗證的匀哄。
本文代碼已上傳至我的GitHub倉庫秦效,進入以后將branches切換為3-FormValidate即可看見。
前篇:
Spring Boot實際應用講解(一):Hello World
Spring Boot實際應用講解(二):配置詳解
后續(xù)將推出以下文章涎嚼,敬請關(guān)注阱州!
Spring Boot實際應用講解(四):RESTful API
Spring Boot實際應用講解(五):AOP之請求日志
Spring Boot實際應用講解(六):MySQL + Spring-data-jpa(Hibernate)
Spring Boot實際應用講解(七):統(tǒng)一異常處理
Spring Boot實際應用講解(八):MySQL + Mybatis
Spring Boot實際應用講解(九):MySQL + Mybatis + Redis
文中若有錯之處,還請各位批評指正法梯,謝謝苔货!
原文作者/ZYRzyr
原文鏈接:http://www.reibang.com/p/a2b4e61b5532
請進入這里獲取授權(quán):https://101709080007647.bqy.mobi