一:为什么要验证
搭建springboot项目,我们都是采用的Restful接口,那么问题来了,当前端调用接口或者是其他项目调用时,我们不能单一靠调用方来控制参数的准确性,自己也要对一些入参校验,保证自己接口的安全性,某些人通过一些特殊的渠道(比如Charles进行抓包),直接将数据传入到我的api,那我仍然进行正常的业务逻辑处理,那么就有可能产生脏数据!“对于脏数据的产生一定是致命”,这句话希望大家牢记在心,再小的脏数据也有可能让你找几个通宵!
二:方案
bean:
public class User{
private int id;
private String name;
}
Controller:
@PostMapping("/editUser")
public String editUser(@RequestBody User user) {
if(user.getId==null)
return "userID不能为空";
if(user.getName==null)
return "name不能为空";
return "sucess";
}
这种做法首先是可取的,能达到我们的要求,但是这样如果model字段过多,判定的就很多,相对维护起来就不是那么方便,其次增加controller层的负担,既然我们来到spring4的时代,就应该适应使用注解的趋势,下面是使用注解后的比变化。
bean:
public class User{
@NotNull(message = "用户ID不能为空")
private int id;
@NotBlank(message = "name不为空")
private String name;
}
Controller:
@PostMapping("/editUser")
public String editUser(@RequestBody @Valid User user, BindingResult results) {
if (results.hasErrors())
return results.getFieldError().getDefaultMessage();
return "success";
}
@NotBlank 注解所指的 password 字段,表示验证密码不能为空,如果为空的话,上面 Controller 中的 create 方法会将message 中的"密码不能为空"返回。