springboot2.3.0版本以上,必须添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
1.controller层
/**
* 登录功能
* @param loginForm 登录参数,包含手机号、验证码;或者手机号、密码
*/
@PostMapping("/login")
public Result login(@RequestBody @Validated LoginFormDTO loginForm, HttpSession session){
// TODO 实现登录功能
return userService.login(loginForm,session);
}
2.请求体
@Data
public class LoginFormDTO {
@NotEmpty(message = "手机号码不能为空")
@Pattern(regexp = "^[1][3,4,5,7,8,9][0-9]{9}$", message = "手机号码不合法")
private String phone;
@NotEmpty(message = "验证码不能为空")
@Size(min = 6,max = 6)
private String code;
private String password;
}
3.全局异常
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = MethodArgumentNotValidException.class)
@ResponseBody
public Result argumentException(MethodArgumentNotValidException exception) {
String resut = "";
//查看MethodArgumentNotValidException类可以发现,异常的信息在BindingResult下List<ObjectError>中
//我这里取第一条的信息进行展示,可根据实际项目情况自行修改
//getDefaultMessage()获取的信息就是我们RequestVerificationCode中的message部分
if (exception.getBindingResult() != null
&& exception.getBindingResult().getAllErrors() != null
&& exception.getBindingResult().getAllErrors().size() > 0) {
resut = exception.getBindingResult().getAllErrors().get(0).getDefaultMessage();
}
//自定义的返回类,可根据实际项目情况自行修改
return Result.fail(resut);
}
/**
* 全局捕获异常
*
* @param e
* @return
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public Result handle(Exception e) {
return Result.fail(e.getMessage());
}
}
注意:正则表达式一定要正确
请求体的成员属性包含其他对象,在其他对象上加注解@Valid