9159金沙游艺场

图片 20
Chrome开发者工具不完全指南(二、进阶篇)
图片 4
IoC 容器的初始化之 BeanDefinition 的载入和解析

Spring Boot实际应用讲解(三):表单验证

文/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项目中,如何使用JPAhibernate将项目中的数据保存到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>
  1. signUpPOST请求参数即为User类中的字段名:nameagepasswordSpring Boot会将其自动组合成User实例;
  2. @Valid:表示该参数需要进行验证,验证点即为上面User类中的字段上的各注解;
  3. BindingResult:此参数包含错误信息,即User字段注解中的message
  4. 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的配置:

运行测试用例,全部成功,说明正确。

图片 1new
project.png

spring: jpa: #hibernate实现jpa hibernate: #数据表的创建方式 ddl-auto: create-drop #是否在控制台显示SQL语句 show-sql: true

除了上面User类使用的注解,还有其它很多类型的注解:

Next,输入项目信息之后,进入如下界面,选择如图选项后,一直Next到最后Finish

ddl-auto:自动创建表的方式,共有5种:updatecreate-dropcreatenonevalidate,分别表示:

注解 作用
@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)长度是否在给定的范围之内

图片 2Web.png

  • update-创建表,如表结构有变则更新;
  • create-drop-每次项目启动删除之前表并新建,项目停止时删除所有表,本文选择此项,方便测试;
  • create-每次项目启动删除之前表并新建;
  • none-不使用自动创建功能;
  • validate-验证表结构等,但不对数据库做修改。

本文介绍了Spring Boot是如何使用注解,就能方便的进行表单验证的。

Finish,等待Maven下载相关依赖,此时可见如下目录结构:

相关文章

No Comments, Be The First!
近期评论
    功能
    网站地图xml地图