> 文章列表 > Spring MVC表单验证

Spring MVC表单验证

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 {@Autowiredprivate TestRestTemplate restTemplate;@Testpublic 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 信用卡验证
@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参数不是邮箱格式,所有接口返回如下:

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