本文提綱
一、表單驗證實例
二、驗證註解說明
三、最後
本文運行環境
Ubuntu 16.04 LTS
JDK 8 +
IntelliJ IDEA ULTIMATE 2017.2
Maven 3.5.0
Spring Boot 1.5.8.RELEASE
一、表單驗證實例
表單驗證,即校驗用戶提交的數據的合理性,如是否爲空,數據長度,數據類型等等,好的驗證,能防止垃圾數據的產生。
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
請求參數即爲User
類中的字段名:name
,age
,password
。Spring Boot
會將其自動組合成User
實例; -
@Valid
:表示該參數需要進行驗證,驗證點即爲上面User
類中的字段上的各註解; -
BindingResult
:此參數包含錯誤信息,即User
字段註解中的message
; -
signUp
方法打印請求參數的值,若未通過驗證則返回錯誤信息,錯誤信息即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 對象是否小等於指定的值,小數存在精度 |
@DecimalMin |
驗證 Number 和 String 對象是否大等於指定的值,小數存在精度 |
@Digits |
驗證Number 和String 的構成是否合法 |
@Past |
驗證Date 和Calendar 對象是否在當前時間之前 |
@Future |
驗證Date 和Calendar 對象是否在當前時間之後 |
@Max |
驗證Number 和String 對象是否小等於指定的值 |
@Min |
驗證Number 和String 對象是否小等於指定的值 |
@NotNull |
驗證對象不爲空 |
@Null |
驗證對象爲空 |
@Pattern |
驗證String 對象是否符合正則表達式的規則 |
@Size |
驗證對象(Array ,Collection ,Map ,String )長度是否在給定的範圍之內 |
三、最後
本文介紹了Spring Boot
是如何使用註解,就能方便的進行表單驗證的。
本文代碼已上傳至我的GitHub倉庫,進入以後將branches切換爲3-FormValidate即可看見。
前篇:
Spring Boot實際應用講解(一):Hello World
Spring Boot實際應用講解(二):配置詳解
後續將推出以下文章,敬請關注!
Spring Boot實際應用講解(四):RESTful API
Spring Boot實際應用講解(五):AOP之請求日誌
Spring Boot實際應用講解(六):MySQL + Spring-data-jpa(Hibernate)
Spring Boot實際應用講解(七):統一異常處理
Spring Boot實際應用講解(八):MySQL + Mybatis
Spring Boot實際應用講解(九):MySQL + Mybatis + Redis
文中若有錯之處,還請各位批評指正,謝謝!
原文作者/ZYRzyr
原文鏈接:http://www.jianshu.com/p/a2b4e61b5532
請進入這裏獲取授權:https://101709080007647.bqy.mobi