Spring MVC表单验证
创始人
2024-06-02 03:09:58
0

服务端进行表单验证,是为了保证前端传入数据的准确、安全。

一个简单的请求示例

新建一个类Req_FormCheck,作为请求参数,代码如下:

@Data
@ToString
@NoArgsConstructor
public class Req_FormCheck {private String name;private String sex;private Integer age;private String email;}

新建控制器,并实现一个简单的接口请求,代码如下

@RestController
@RequestMapping("/api/test/formCheck")
public class TestFormCheckController {/*** 表单验证测试* @param req* @return*/@RequestMapping(value = "/demo",method = RequestMethod.POST)public String demo(@RequestBody Req_FormCheck req){return "success";}
}

为了方便测试,这里直接新建一个单元测试,代码如下:

/*** web请求测试(control层测试)* webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT  设置随机端口*/
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringRunner.class)
public class WebRequestTests {@Autowiredprivate TestRestTemplate restTemplate;@Testpublic void testCheckForm(){Req_FormCheck req=new Req_FormCheck();req.setName("张三");req.setAge(1000);ResponseEntity result = restTemplate.postForEntity("/api/test/formCheck/demo",req, String.class);System.out.println(result.getBody());}}

然后运行下测试,测试结果如下:

接口返回了”success“,这样一个简单的请求示例代码就完成了。

 

实现后端的表单验证

我们构建了一个简单的请求,但是针对这个请求,后端没有进行任何验证!我们需要在Req_FormCheck这个类中设定验证规则,来保证数据的合法、安全。在javax.validation.constraints.*中定义了一系列的JSR 303规范给出的注解,先看看一些常用的注解。

验证注解
注解作用
@Null被注释的对象必须为null
@NotNull被注释的对象不能为null
@NotEmpty被注释的对象不能为null,不能为空字符串""
@NotBlank

被注释的对象是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格

@AssertTrue被注释的对象必须为true
@AssertFalse被注释的对象必须为false
@Size(min=,max=) 被注释的对象的值是否在指定的范围内
@Length(min=,max=) 被注释的对象的长度是否在指定的范围内
@Min被注释的对象必须是一个数字,值必须大于等于指定的值
@Max被注释的对象必须是一个数字,值必须小于等于指定的值
@DecimalMin被注释的对象的值必须大于等于指定的值。这个指定的值是一个通过BigDecimal定义的最大值的字符串表示,小数存在精度
@DecimalMax

被注释的对象的值必须小于等于指定的值。这个指定的值是一个通过BigDecimal定义的最大值的字符串表示,小数存在精度

@Range(min=, max=)检查数字是否介于min和max之间
@Past被注释的对象必须是一个过去的日期
@Future被注释的对象必须是一个将来的日期
@Pattern被注释的对象必须符合指定的正则表达式
@CreditCardNumber信用卡验证
@Email邮箱验证

修改请求类,增加验证规则,代码如下:

@Data
@ToString
@NoArgsConstructor
public class Req_FormCheck {@NotEmpty(message = "必须传入name参数,且name传入的值不能是空字符串")private String name;//@NotNull 表示必须传入,但可以传入空字符串@NotNull(message = "必须传入sex参数")private String sex;private Integer age;@NotEmpty(message = "必须传入email参数,且email传入的值不能是空字符串")@Email(message = "email如果有传入且是非空字符串,值必须传入邮箱格式")private String email;}

修改控制器中的接口,增加@Valid,用于启用注解式的验证,如果验证失败,则接口返回失败信息,代码如下(红色方框为新增的代码):

这样,我们就完成了后端验证的代码。

 测试下,修改测试代码如下:

 由于传入的email参数不是邮箱格式,所有接口返回如下:

 可以尝试修改传入的参数来进行测试。

相关内容

热门资讯

原创导游词巴人之迷详解 原创导游词巴人之迷详解  巴人之谜:剑  从公元前十六世纪开始,巴人已在三峡地区频繁活动。他们在长江...
福建南靖土楼导游词 福建南靖土楼导游词范本  南靖土楼是指遍布漳州市南靖、华安、平和、诏安、云霄、漳浦等县山区的土楼,以...
索溪峪导游词 索溪峪导游词10篇  作为一名可信赖的导游人员,总归要编写导游词,一篇完整的导游词,其结构一般包括习...
青海祁连山介绍导游词 青海祁连山介绍导游词  祁连山的平均山脉海拔在4000米~5000米之间,高山积雪形成的硕长而宽阔的...
威海幸福门导游词 威海幸福门导游词  作为一位兢兢业业的旅游从业人员,编写导游词是必不可少的,导游词不是以一代百、千篇...
浙江莫干山导游词 浙江莫干山导游词  浙江莫干山位于浙江省湖州市德清县境内,美丽富饶的沪、宁、杭金三角的中心。下面小编...
金界壕遗址导游词 金界壕遗址导游词  作为一名具备丰富知识的导游,就难以避免地要准备导游词,导游词的主要特点是口语化,...
世界遗产导游词 世界遗产导游词  各位游客,大家好!欢迎大家来到‘世界遗产’之称的古村落--...
贵州天河潭风景区的导游词 贵州天河潭风景区的导游词  各位游客们,我是你们导游×××,本次旅行的目的地是贵州的天河潭景区。天河...
河南开封山陕甘会馆导游词 河南开封山陕甘会馆导游词范文  各位朋友大家好,欢迎您来到山陕甘会馆,大家一路上辛苦了,我是您这次行...
介绍公园的导游词 介绍公园的导游词范文  篇一:北滘公园导游词  欢迎您前往北考公园。  北郊镇新中心城区,东承德路西...
小学生导游词结束语 导语:导游词是导游人员引导游客观光游览时的讲解词,是导游员同游客交流思想,向游客传播文化知识的工具,...
个园导游词   个园导游词(一)  个园是扬州现存历史最悠久、保存最完好的盐商园林,南临中国十大历史文化名街东关...
千岛湖景点导游词 千岛湖景点导游词  作为一位杰出的导游,就有可能用到导游词,一篇完整的导游词,其结构一般包括习惯用语...
南京中山陵导游词 南京中山陵导游词(精选5篇)  导读:南京中山陵美不胜收,远远望去,一大面山,郁郁葱葱。下面是小编整...
烟台的海导游词 烟台的海导游词15篇  作为一名专门为游客提供帮助的导游,很有必要精心设计一份导游词,导游词具有极强...
天津市古文化街导游词 天津市古文化街导游词  来自××的朋友大家好!  首先我代表青年旅行社欢迎各...
杭州西湖中英文导游词 杭州西湖中英文导游词  杭州西湖的导游词怎么写?下面小编为大家推荐2篇中英文的范文,希望对大家有帮助...
西安秦始皇兵马俑博物馆导游词 西安秦始皇兵马俑博物馆导游词  一篇完整的导游词,其结构一般包括习惯用语、概括介绍、重点讲解三个部分...
杭州山沟沟概况导游词 杭州山沟沟概况导游词  作为一名默默奉献的导游,总归要编写导游词,导游词作为一种解说的文体,它的作用...