Spring Boot实际应用讲解(三):表单验证
- 十月 05, 2019
- 9159金沙游艺场编程
- 没有评论
文/ZYRzyr原文链接:
文/ZYRzyr原文链接:
文/ZYRzyr原文链接:
本文提纲一、简介二、实例三、最后
本文提纲一、表单验证实例二、验证注解说明三、最后
由于有童鞋反应,之前的Spring Boot
简易使用指南内容太多且有不全之处,不方便阅读,所以我将其拆分为多篇,并分别对其进行更详细的说明,有兴趣可以关注本猿,后续将逐步推出。
本文运行环境
本文运行环境
本文提纲一、Spring Boot简介二、Hello World实战三、最后
Ubuntu 16.04 LTSJDK 8 +IntelliJ IDEA ULTIMATE 2017.2Maven 3.5.0Spring Boot 1.5.8.RELEASE
Ubuntu 16.04 LTSJDK 8 +IntelliJ IDEA ULTIMATE 2017.2Maven 3.5.0Spring Boot 1.5.8.RELEASE
本文运行环境
相信大家对MySQL
都很熟悉了,就不多言。JPA
可以简单的理解为一种保存数据的规范,而hibernate
是实现这种规范的具体操作。所以本文主要讲解在Spring Boot
项目中,如何使用JPA
即hibernate
将项目中的数据保存到MySQL
数据库中。
表单验证,即校验用户提交的数据的合理性,如是否为空,数据长度,数据类型等等,好的验证,能防止垃圾数据的产生。
Ubuntu 16.04 LTSJDK 8 +IntelliJ IDEA ULTIMATE 2017.2Maven 3.5.0Spring Boot 1.5.8.RELEASE
在pom.xml
中添加如下依赖:
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 + ''' + '}'; }}
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;@RestControllerpublic 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"; }}
来自官方的描述:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId></dependency>
- 对
signUp
的POST
请求参数即为User
类中的字段名:name
,age
,password
。Spring Boot
会将其自动组合成User
实例; @Valid
:表示该参数需要进行验证,验证点即为上面User
类中的字段上的各注解;BindingResult
:此参数包含错误信息,即User
字段注解中的message
;signUp
方法打印请求参数的值,若未通过验证则返回错误信息,错误信息即User
类字段注解中的message
,若验证成功直接返回success
。
Spring Boot makes it easy to create stand-alone, production-grade
Spring based Applications that you can “just run”…Most Spring Boot
applications need very little Spring configuration.
在配置文件application.yml
中添加MySQL
配置:
新建测试类UserControllerTest
(此处未写完所有测试用例):
简而言之,就是只需要很少的配置,就能搭建一个可以轻松运行的产品级项目。
spring: profiles: active: pro #使用生成环境配置 datasource: #MySQL数据库驱动 driver-class-name: com.mysql.jdbc.Driver #数据库连接地址 url: jdbc:mysql://localhost:3306/demo?useSSL=false #数据库连接名 username: root #数据库连接密码 password: 123456
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@AutoConfigureMockMvcpublic 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 .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 .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 .andExpect(MockMvcResultMatchers.content().string); }}
IntelliJ IDEA
新建一个工程,选择如下图所示选项:
在application-pro.yml
中添加jpa
的配置:
运行测试用例,全部成功,说明正确。
new
project.png
spring: jpa: #hibernate实现jpa hibernate: #数据表的创建方式 ddl-auto: create-drop #是否在控制台显示SQL语句 show-sql: true
除了上面User
类使用的注解,还有其它很多类型的注解:
Next
,输入项目信息之后,进入如下界面,选择如图选项后,一直Next
到最后Finish
:
ddl-auto
:自动创建表的方式,共有5种:update
、create-drop
、create
、none
、validate
,分别表示:
注解 | 作用 |
---|---|
@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 )长度是否在给定的范围之内 |
Web.png
update
-创建表,如表结构有变则更新;create-drop
-每次项目启动删除之前表并新建,项目停止时删除所有表,本文选择此项,方便测试;create
-每次项目启动删除之前表并新建;none
-不使用自动创建功能;validate
-验证表结构等,但不对数据库做修改。
本文介绍了Spring Boot
是如何使用注解,就能方便的进行表单验证的。
Finish
,等待Maven下载相关依赖,此时可见如下目录结构:
No Comments, Be The First!