Spring MVC表单验证
Posted yvan0013
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring MVC表单验证相关的知识,希望对你有一定的参考价值。
服务端进行表单验证,是为了保证前端传入数据的准确、安全。
一个简单的请求示例
新建一个类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
@Autowired
private TestRestTemplate restTemplate;
@Test
public void testCheckForm()
Req_FormCheck req=new Req_FormCheck();
req.setName("张三");
req.setAge(1000);
ResponseEntity<String> 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 | 信用卡验证 |
邮箱验证 |
修改请求类,增加验证规则,代码如下:
@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参数不是邮箱格式,所有接口返回如下:
可以尝试修改传入的参数来进行测试。
以上是关于Spring MVC表单验证的主要内容,如果未能解决你的问题,请参考以下文章
带有 i18n 消息的 Spring-MVC + RESTeasy 表单 bean 验证 (JSR 303)