经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring Boot » 查看文章
详解SpringBoot中@NotNull,@NotBlank注解使用
来源:jb51  时间:2022/8/23 15:37:01  对本文有异议

一.添加依赖

  1. <!-- spring-boot 2.3及以上的版本只需要引入下面的依赖 -->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-validation</artifactId>
  5. </dependency>

二.在类中使用验证注解

1.创建验证实体类(嵌套使用)

  1. @Data
  2. public class UserDto{
  3. @NotBlank(message = "请输入用户名称")
  4. private String userName;
  5. @NotBlank(message = "请正确输入密码")
  6. @Length(min = 6,max = 18)
  7. private String password;
  8. @Email(message = "请正确输入邮箱")
  9. private String email;
  10. @Valid
  11. @NotEmpty(message = "角色不能为空")
  12. private List<RoleDto> roleDtos;
  13. }
  14. //被嵌套的类
  15. @Data
  16. public class roleDto{
  17. @NotNull(message = "角色ID不能为空")
  18. private Integer roleId;
  19. @NotBlank(message = "请输入角色名称")
  20. private String roleName;
  21. @NotBlank(message = "请输入角色名称")
  22. private String roleCode;
  23. private String desc;
  24. }

2.创建全局异常处理器,对message信息进行处理,并返回给前端

  1. @Component
  2. @Slf4j
  3. public class GlobalValidHandler implements HandlerExceptionResolver {
  4. @Override
  5. public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
  6. ModelAndView modelAndView = new ModelAndView(new MappingJackson2JsonView());
  7. String errorMsg;
  8. if (ex instanceof BindException) {
  9. //对于验证注解在实体类的属性中的异常处理
  10. BindException bex = (BindException) ex;
  11. errorMsg = Objects.requireNonNull(bex.getBindingResult().getFieldError()).getDefaultMessage();
  12. } else if (ex instanceof ConstraintViolationException) {
  13. //对于验证注解直接在方法参数中使用的异常处理
  14. ConstraintViolationException cve = (ConstraintViolationException) ex;
  15. errorMsg = cve.getMessage();
  16. if (errorMsg != null) {
  17. errorMsg = errorMsg.substring(errorMsg.indexOf(": ") + 2);
  18. }
  19. } else {
  20. //其他
  21. errorMsg = ex.getMessage();
  22. }
  23. modelAndView.addObject("msg", errorMsg);
  24. modelAndView.addObject("code", HttpServletResponse.SC_BAD_REQUEST);
  25. return modelAndView;
  26. }
  27. }

3.在controller中的使用

  1. @RestController
  2. @RequestMapping("/user")
  3. public class UserController{
  4. @Autowired
  5. private UserService userService;
  6. @PostMapping("/add")
  7. public ApiResult addUser(@Valid @RequsetBody UserDto userDto){
  8. return ApiResult.data(userService.addUser(userDto));
  9. }
  10. }

三.在方法参数中使用验证注解,与@RequsetParam注解同时使用,注意类上使用@Validated

  1. @Validated
  2. @RestController
  3. @RequestMapping("/user")
  4. public class UserController{
  5. @Autowired
  6. private UserSerivce userService;
  7. @GetMapping("/list")
  8. public ApiResult queryUsers(@RequestParam(name="userName", required = false, defaultValue = "")
  9. @NotBlank(message = "请输入用户") String userName,
  10. @RequestParam(name="pageNumber", required = false, defaultValue = 1) Integre pageNumber,
  11. @RequestParam(name="pageSize", required = false, defaultValue = 10) Integre pageSize){
  12. return ApiResult.Data(userService.queryUsers(userName,pageNumber,pageSize));
  13. }
  14. }

ps: 需要在全局变量中对验证注解进行异常处理 GlobalValidHandler

四.自定义验证注解

1.定义验证注解

  1. @Target({ElementType.METHOD, ElementType.FIELD})
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Constraint(validatedBy = MyConstraintValidtor.class)
  4. public @interface MyValidator {
  5. String message() default "校验未通过";
  6. Class<?>[] groups() default {};
  7. Class<? extends Payload>[] payload() default {};
  8. }

2.实现验证注解的具体验证逻辑

  1. public class MyConstraintValidator implements ConstraintValidator<MyValidator, Object> {
  2. @Override
  3. public void initialize(MyValidator validator) {
  4. ConstraintValidator.super.initialize(validator);
  5. }
  6. @Override
  7. public boolean isValid(Object value, ConstraintValidatorContext context) {
  8. //具体校验逻辑
  9. //........
  10. //........
  11. //举个例 验证不为空
  12. return !ObjectUtils.isEmpty(value);
  13. }
  14. }

3.使用

  1. @Data
  2. public class UserDto{
  3. @NotNull(message="用户名不能为空")
  4. private String userName;
  5. @MyValidator(message="密码不能为空")
  6. private String password;
  7. }

到此这篇关于详解SpringBoot中@NotNull,@NotBlank注解使用的文章就介绍到这了,更多相关SpringBoot注解内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号