Spring Boot實際應用講解(三):表單驗證 一、表單驗證實例 二、驗證註解說明 三、最後

文/ZYRzyr
原文鏈接:http://www.jianshu.com/p/a2b4e61b5532

本文提綱
一、表單驗證實例
二、驗證註解說明
三、最後

本文運行環境

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";
    }
}
  1. signUpPOST請求參數即爲User類中的字段名:nameagepasswordSpring Boot會將其自動組合成User實例;
  2. @Valid:表示該參數需要進行驗證,驗證點即爲上面User類中的字段上的各註解;
  3. BindingResult:此參數包含錯誤信息,即User字段註解中的message
  4. 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 驗證 NumberString 對象是否小等於指定的值,小數存在精度
@DecimalMin 驗證 NumberString 對象是否大等於指定的值,小數存在精度
@Digits 驗證NumberString的構成是否合法
@Past 驗證DateCalendar對象是否在當前時間之前
@Future 驗證DateCalendar對象是否在當前時間之後
@Max 驗證NumberString對象是否小等於指定的值
@Min 驗證NumberString對象是否小等於指定的值
@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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章