SpringBoot结合JSR303对前端数据进行校验的示例代码

 更新时间:2020年09月02日 11:29:52   作者:IT小村  
这篇文章主要介绍了SpringBoot结合JSR303对前端数据进行校验的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、校验分类

数据的校验一般分为**前端校验后端校验**

二、前端校验

前端校验是最为明显的,先说一下:

① HTML

非空校验HTML5 新增的属性required="true",一旦没有填写就输入框就显示红色,具体使用如:

<input type="text" id="name" name="name" required="true"/>

② JS

同时在提交表单发送 Ajax请求 的时候,来个 onSubmit 函数,具体例如(使用点 EasyUI ):

function submitData(){
		$("#fm").form("submit",{
			url:"/admin/film/save",
			onSubmit:function(){
				var content=CKEDITOR.instances.content.getData();
				if(content==""){
					$.messager.alert("系统提示","内容不能为空!");
					return false;
				}
				return $(this).form("validate");
			},
			success:function(result){
				var result=eval('('+result+')');
				if(result.success){
					$.messager.alert("系统提示","保存成功!");
					resetValue();
				}else{
					$.messager.alert("系统提示","保存失败!");
				}
				
			}
		});
	}

但我们都知道,这是防君子不防小人的做法,用户可以使用 F12,查看源码,修改关键部位的代码,
如把 required="true" 删除掉,就可以提交表单了。
所以前端作用虽然明显,但是数据处理方面,真正用处并不大。

三、后端校验

前面说了那么多,就是为了引出 后端校验 这一话题。数据是否提交到数据库中去,就看后端的代码了。
后端校验,主要实施在 JavaBean、Controller 中。下面列举一个简单的例子,从代码中说明一切。

① 代码结构图

② entity

实体属性部位空,一般使用如 @NotEmpty(message="请输入用户名!") ,这样既不能为 ,也不能为null

package com.cun.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotBlank;

import io.swagger.annotations.ApiModelProperty;

@Entity
@Table(name = "t_person")
public class Person {

	@Id
	@GeneratedValue
	@ApiModelProperty(value = "用户id")
	private Integer id;

	@NotBlank(message = "用户名不能为空") // 为""/''都不行
	@Size(min = 2, max = 30, message = "2<长度<30")
	@Column(length = 50)
	@ApiModelProperty(value = "用户名")
	private String userName;

	@NotNull(message = "用户密码不能为空")
	@Column(length = 50)
	@ApiModelProperty(value = "用户密码")
	private String password;

	@Max(value = 150, message = "age应<150") // 数字
	@Min(value = 1, message = "age应>1") // 数字
	@NotNull(message = "年龄不能为空")
	@ApiModelProperty(value = "用户年龄")
	private Integer age;

	@NotNull(message = "邮箱不为空")
	@Email(message = "邮件格式不对")
	@Column(length = 100)
	@ApiModelProperty(value = "用户邮箱")
	private String email;

	// 使用 JPA 必备
	public Person() {
		super();
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

}

③ dao

其实也没什么代码,这就是 JPA 的强大之处

package com.cun.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

import com.cun.entity.Person;

public interface PersonDao extends JpaRepository<Person, Integer>, JpaSpecificationExecutor<Person> {

}

④ Service、ServiceImpl (省略)

⑤ Controller

package com.cun.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.cun.dao.PersonDao;
import com.cun.entity.Person;

import springfox.documentation.swagger2.annotations.EnableSwagger2;

@RestController
@RequestMapping("/person")
@EnableSwagger2
public class PersonController {

	@Autowired
	private PersonDao personDao;

	@PostMapping("/insert")
	public Map<String, Object> insertPerson(@Valid Person person, BindingResult bindingResult) {
		Map<String, Object> map = new HashMap<String, Object>();
		if (bindingResult.hasErrors()) {
			List<ObjectError> errorList = bindingResult.getAllErrors();
			List<String> mesList=new ArrayList<String>();
			for (int i = 0; i < errorList.size(); i++) {
				mesList.add(errorList.get(i).getDefaultMessage());
			}
			map.put("status", false);
			map.put("error", mesList);
		} else {
			map.put("status", true);
			map.put("msg", "添加成功");
			personDao.save(person);
		}
		return map;
	}

}

⑥ yml

server:
 port: 80 #为了以后访问项目不用写端口号
 context-path: / #为了以后访问项目不用写项目名
spring:
 datasource:
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://localhost:3306/springboot
  username: root
  password: 123
 jpa:
  hibernate:
   ddl-auto: update #数据库同步代码
  show-sql: true   #dao操作时,显示sql语句

⑦ POM

使用 SpringBoot Starter 导入 JPA、MySQL

使用 Swagger 演示

<!-- swagger生成接口API -->
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>2.7.0</version>
		</dependency>

		<!-- 接口API生成html文档 -->
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>2.6.1</version>
		</dependency>

四、演示

输入 http://localhost/swagger-ui.html 进入接口测试站点

什么都没有填写,直接点击Try it out!,可以看到返回给前端的 JSON 数据,这时候数据的数据是没有改动的,一条sql 语句都没有执行

当然还可以进行其他测试,这里就省略了

到此这篇关于SpringBoot结合JSR303对前端数据进行校验的示例代码的文章就介绍到这了,更多相关SpringBoot JSR303校验内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于工厂方法模式的Java实现

    关于工厂方法模式的Java实现

    这篇文章主要介绍了关于工厂方法模式的Java实现讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • SpringBoot过滤器的使用

    SpringBoot过滤器的使用

    过滤器是对数据进行过滤,预处理过程,当我们访问网站时,有时候会发布一些敏感信息,发完以后有的会用*替代,还有就是登陆权限控制等,一个资源,没有经过授权,肯定是不能让用户随便访问的,这个时候,也可以用到过滤器,需要的朋友可以参考一下
    2021-11-11
  • 浅谈String类型如何转换为time类型存进数据库

    浅谈String类型如何转换为time类型存进数据库

    这篇文章主要介绍了String类型如何转换为time类型存进数据库,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • spring中WebClient如何设置连接超时时间以及读取超时时间

    spring中WebClient如何设置连接超时时间以及读取超时时间

    这篇文章主要给大家介绍了关于spring中WebClient如何设置连接超时时间以及读取超时时间的相关资料,WebClient是Spring框架5.0引入的基于响应式编程模型的HTTP客户端,它提供一种简便的方式来处理HTTP请求和响应,需要的朋友可以参考下
    2024-08-08
  • JavaSE经典小练习项目之拷贝文件夹

    JavaSE经典小练习项目之拷贝文件夹

    文件拷贝是一个常见的任务,无论是备份文件,还是将文件从一个位置复制到另一个位置,文件拷贝都是必不可少的,这篇文章主要给大家介绍了关于JavaSE经典小练习项目之拷贝文件夹的相关资料,需要的朋友可以参考下
    2023-10-10
  • Java中mybatis的三种分页方式

    Java中mybatis的三种分页方式

    这篇文章主要介绍了Java中mybatis的三种分页方式,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • spring boot 如何指定profile启动

    spring boot 如何指定profile启动

    这篇文章主要介绍了spring boot 如何指定profile启动的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 通过Java实现对PDF页面的详细设置

    通过Java实现对PDF页面的详细设置

    这篇文章主要介绍了通过Java实现对PDF页面的详细设置,下面的示例将介绍通过Java编程来对PDF页面进行个性化设置的方法,包括设置页面大小、页边距、纸张方向、页面旋转等,需要的朋友可以参考下
    2019-07-07
  • java实现根据ip地址获取地理位置

    java实现根据ip地址获取地理位置

    本文给大家汇总介绍了2种分别使用新浪和淘宝接口,实现根据IP地址获取详细的地理位置的代码,非常的实用,有需要的小伙伴可以参考下。
    2016-03-03
  • SpringBoot中封装Cors自动配置方式

    SpringBoot中封装Cors自动配置方式

    这篇文章主要介绍了SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03

最新评论