参数
参数名称 | 说明 | 类型 | 是否必须 | 备注 |
username | 用户名 | String | 是 | 5-16位非空字符 |
password | 密码 | String | 是 | 5-16位非空字符 |
手动校验:
public Result register(String username, String password){
if (username!=null && username.length()>=5 && username.length()<=16 &&
password!=null && password.length()>=5 && password.length()<=16)
{
......
}else {
return Rusult.error("参数不合法");
}
此时,可以完成用户名和密码的校验了,但是代码看上去有点繁琐,如果我们需要校验的参数较多的情况下,就会更加繁琐了,所以需要用其他方案解决这个问题。
Spring Validation
Spring提供的一个参数校验框架,使用预定义的注解完成参数校验
1. 引入Spring Validation起步依赖
<!--validation依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2. 在参数前面添加@Pattern注解
3. 在Controller类上添加@Validated注解
@Validated
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/register")
public Result register(@Pattern(regexp = "^\\S{5,16}$") String username, @Pattern(regexp = "^\\S{5,16}$") String password){
......
}
}
现在就可以完成校验了,但是测试的时候,校验失败浏览器得到的状态是500,所以接下来还需要一个全局异常来处理参数校验失败异常。
解决:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public Result handleException(Exception e){
e.printStackTrace();
return Result.error(StringUtils.hasLength(e.getMessage())? e.getMessage() : "操作失败");
}
}
再返回Postman测试时显示: