在平时我们写项目的时候,前端向后端传输参数的时候都需要进行判断,比如说是否为空串啊,是否为null啊,在这个时候就需要进行参数校验了。到这个时候我们第一时间都会想到使用if,有几个参数就有几个if,这样的话看起来就十分的冗余或者说不那么“高大上”,所以在这里就分享一个方法–valid参数校验(主要在springboot项目中使用)。
步骤
- 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
依赖就不需要解释了吧,这个东西会springboot都能看懂
- 创建一个pojo类(dto对象)例如:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDto {
private String username;
private String password;
}
- 模拟请求
这里就得进行参数校验了,怎么校验呢?
1,在dto中添加校验规则。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDto {
@NotEmpty(message = "用户名不能为空!")
private String username;
@NotEmpty(message = "密码不能为空!")
private String password;
}
2,controller中写法。
在这里写法不唯一,有很多都是使用的全局异常处理,我这里的话就不使用那种方法了,来一种更笨的(个人觉得)。
@Controller
public class testDemo {
@RequestMapping("/test")
@ResponseBody
public Map<String,Object> test(@Valid @RequestBody UserDto userDto, BindingResult result){
HashMap<String, Object> map = new HashMap<>();
List<FieldError> fieldErrors = result.getFieldErrors();
if(!fieldErrors.isEmpty()) {
StringBuilder res = new StringBuilder();
for (FieldError fieldError : fieldErrors)
res.append(fieldError.getDefaultMessage());
map.put("code",201);
map.put("msg",res);
return map;
}
map.put("code",200);
map.put("msg","ok!");
return map;
}
}
到这里基本上就完成了。那么怎么确定呢,我就使用postman来进行测试吧。
不正常情况
正常情况
这样的话是不是就比我们使用if来的快呢,这里的字段还是少的,如果使用if来进行判断,到时候字段多了,就得一直if了。
当然,在这种校验方法中,是有很多规则的,比如@NotNull、@NotBlank等等,这些东西的话就需要自己积累或者在使用的时候百度就可以,当然最基本的还是可以记一下,就比如@NotNull、@NotBlank、@NotEmpty的区别啊等等。
(这个demo在https://gitee.com/tenaciousxl/springboot.git,需要的可以去拉取下来看一下)