下面是一份详解Spring中@Valid和@Validated注解用法的完整攻略。
什么是@Valid和@Validated
在Spring框架中,我们经常会使用Controller层来接收前端发送的HTTP请求,处理业务逻辑并返回响应。而在参数校验环节,我们就可以使用@Valid和@Validated注解,实现自动校验请求参数的功能。
@Valid注解用于验证Java Bean对象,@Validated注解用于验证普通数据类型。它们都可以通过@Inject或@Autowired来获取Spring中的validator实例,并自动进行数据验证。
@Valid和@Validated的具体应用
@Valid注解用于Java Bean对象的验证
我们可以在Java Bean对象中使用JSR 303规范定义的注解来标注属性校验规则,例如:
public class User {
@NotBlank(message = "用户名不能为空")
private String username;
@Size(max = 20, message = "密码长度不能超过20位")
private String password;
@Email(message = "电子邮件格式不正确")
private String email;
//省略getter和setter
}
在Controller层的方法参数中使用@Valid注解,即可实现Java Bean对象数据校验:
@RequestMapping("/register")
@ResponseBody
public String register(@Valid User user) {
//处理注册的业务逻辑
return "success";
}
如果存在校验失败的情况,Spring会自动将错误信息存储在Errors或BindingResult对象中,并将其作为ModelAndView的属性返回给前端,代码如下:
@RequestMapping("/register")
@ResponseBody
public String register(@Valid User user, BindingResult result) {
if (result.hasErrors()) {
//返回错误信息给前端
return result.getAllErrors().toString();
}
//处理注册的业务逻辑
return "success";
}
@Validated注解用于普通数据类型的验证
与@Valid注解不同,@Validated注解适用于验证普通数据类型,例如:
public interface UserService {
void updateUserEmail(@NotNull Integer userId, @Email String email);
}
在Controller层中,我们可以在方法参数上使用@Validated和@ControllerAdvice注解,对普通数据类型进行校验,例如:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public String handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
return e.getBindingResult().getAllErrors().toString();
}
}
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping("/update/email")
public String updateUserEmail(@RequestParam @NotNull Integer userId, @RequestParam @Email String email) {
//调用Service层的业务逻辑
userService.updateUserEmail(userId, email);
return "success";
}
}
在以上的代码中,MethodArgumentNotValidException将被全局异常处理器GlobalExceptionHandler捕获到,可以在其中编写自己的异常处理逻辑。
总结
以上就是关于Spring中@Valid和@Validated注解用法的完整攻略,通过本文的讲解,你应该能够掌握@Valid和@Validated注解的具体用法,并在实际开发中灵活运用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Spring中@Valid和@Validated注解用法 - Python技术站