SpringBoot结合JSR303对前端数据进行校验的示例代码
一、校验分类
数据的校验一般分为**前端校验、后端校验**
二、前端校验
前端校验是最为明显的,先说一下:
①HTML
非空校验如HTML5新增的属性required="true",一旦没有填写就输入框就显示红色,具体使用如:
②JS
同时在提交表单发送Ajax请求的时候,来个onSubmit函数,具体例如(使用点EasyUI):
functionsubmitData(){
$("#fm").form("submit",{
url:"/admin/film/save",
onSubmit:function(){
varcontent=CKEDITOR.instances.content.getData();
if(content==""){
$.messager.alert("系统提示","内容不能为空!");
returnfalse;
}
return$(this).form("validate");
},
success:function(result){
varresult=eval('('+result+')');
if(result.success){
$.messager.alert("系统提示","保存成功!");
resetValue();
}else{
$.messager.alert("系统提示","保存失败!");
}
}
});
}
但我们都知道,这是防君子不防小人的做法,用户可以使用F12,查看源码,修改关键部位的代码,
如把required="true"删除掉,就可以提交表单了。
所以前端作用虽然明显,但是数据处理方面,真正用处并不大。
三、后端校验
前面说了那么多,就是为了引出后端校验这一话题。数据是否提交到数据库中去,就看后端的代码了。
后端校验,主要实施在JavaBean、Controller中。下面列举一个简单的例子,从代码中说明一切。
①代码结构图
②entity
实体属性部位空,一般使用如@NotEmpty(message="请输入用户名!"),这样既不能为空,也不能为null
packagecom.cun.entity;
importjavax.persistence.Column;
importjavax.persistence.Entity;
importjavax.persistence.GeneratedValue;
importjavax.persistence.Id;
importjavax.persistence.Table;
importjavax.validation.constraints.Max;
importjavax.validation.constraints.Min;
importjavax.validation.constraints.NotNull;
importjavax.validation.constraints.Null;
importjavax.validation.constraints.Size;
importorg.hibernate.validator.constraints.Email;
importorg.hibernate.validator.constraints.NotBlank;
importio.swagger.annotations.ApiModelProperty;
@Entity
@Table(name="t_person")
publicclassPerson{
@Id
@GeneratedValue
@ApiModelProperty(value="用户id")
privateIntegerid;
@NotBlank(message="用户名不能为空")//为""/''都不行
@Size(min=2,max=30,message="2<长度<30")
@Column(length=50)
@ApiModelProperty(value="用户名")
privateStringuserName;
@NotNull(message="用户密码不能为空")
@Column(length=50)
@ApiModelProperty(value="用户密码")
privateStringpassword;
@Max(value=150,message="age应<150")//数字
@Min(value=1,message="age应>1")//数字
@NotNull(message="年龄不能为空")
@ApiModelProperty(value="用户年龄")
privateIntegerage;
@NotNull(message="邮箱不为空")
@Email(message="邮件格式不对")
@Column(length=100)
@ApiModelProperty(value="用户邮箱")
privateStringemail;
//使用JPA必备
publicPerson(){
super();
}
publicIntegergetId(){
returnid;
}
publicvoidsetId(Integerid){
this.id=id;
}
publicStringgetUserName(){
returnuserName;
}
publicvoidsetUserName(StringuserName){
this.userName=userName;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicIntegergetAge(){
returnage;
}
publicvoidsetAge(Integerage){
this.age=age;
}
publicStringgetEmail(){
returnemail;
}
publicvoidsetEmail(Stringemail){
this.email=email;
}
}
③dao
其实也没什么代码,这就是JPA的强大之处
packagecom.cun.dao; importorg.springframework.data.jpa.repository.JpaRepository; importorg.springframework.data.jpa.repository.JpaSpecificationExecutor; importcom.cun.entity.Person; publicinterfacePersonDaoextendsJpaRepository,JpaSpecificationExecutor { }
④Service、ServiceImpl(省略)
⑤Controller
packagecom.cun.controller;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importjavax.validation.Valid;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.validation.BindingResult;
importorg.springframework.validation.ObjectError;
importorg.springframework.web.bind.annotation.PostMapping;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RestController;
importcom.cun.dao.PersonDao;
importcom.cun.entity.Person;
importspringfox.documentation.swagger2.annotations.EnableSwagger2;
@RestController
@RequestMapping("/person")
@EnableSwagger2
publicclassPersonController{
@Autowired
privatePersonDaopersonDao;
@PostMapping("/insert")
publicMapinsertPerson(@ValidPersonperson,BindingResultbindingResult){
Mapmap=newHashMap();
if(bindingResult.hasErrors()){
ListerrorList=bindingResult.getAllErrors();
ListmesList=newArrayList();
for(inti=0;i
⑥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
使用SpringBootStarter导入JPA、MySQL
使用Swagger演示
io.springfox
springfox-swagger2
2.7.0
io.springfox
springfox-swagger-ui
2.6.1
四、演示
输入http://localhost/swagger-ui.html进入接口测试站点
什么都没有填写,直接点击Tryitout!,可以看到返回给前端的JSON数据,这时候数据的数据是没有改动的,一条sql语句都没有执行
当然还可以进行其他测试,这里就省略了
到此这篇关于SpringBoot结合JSR303对前端数据进行校验的示例代码的文章就介绍到这了,更多相关SpringBootJSR303校验内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。