• JSR303数据校验


    标注校验注解

    javax.validation.constraints 中定义了非常多的校验注解

    @Email、@Future、@NotBlank、@Size 等

     使用校验功能

    @Valid 开启校验功能

     提取校验错误信息

    BindingResult 获取校验结果

     分组校验与自定义校验

    Groups 定义校验分组信息; 可以编写自定义校验注解和自定义校验器 默认情况下,异常信息会从应用的 classpath 下的 ValidationMessages.properties 文件中加载

     例子

    * 1)给bean添加校验注解,并定义自己的message提示
    * 2)开启校验功能@valid
    * 效果:校验错误以后会有默认的响应
    * 3)给校验的bean后紧跟一个bindingResult ,就可以获取到校验结果
    

    * 4)分组校验
    *    1)@NotNull(message = "修改必须指定品牌id",groups = UpdateGroup.class)
            @Null(message = "新增不能指定id",groups = AddGroup.class)
    *    2)@Validated(UpdateGroup.class)
    *    3)默认没有指定分组的校验注解,@Null,在分组校验的情况下@Validated(UpdateGroup.class)不生效
    1. public interface AddGroup {
    2. }
    1. public interface UpdateGroup {
    2. }

     

    1. @Data
    2. @TableName("pms_brand")
    3. public class BrandEntity implements Serializable {
    4. private static final long serialVersionUID = 1L;
    5. /**
    6. * 品牌id
    7. */
    8. @NotNull(message = "修改必须指定品牌id",groups = UpdateGroup.class)
    9. @Null(message = "新增不能指定id",groups = AddGroup.class)
    10. @TableId
    11. private Long brandId;
    12. /**
    13. * 品牌名
    14. */
    15. @NotBlank(message = "品牌名必须提交",groups = {AddGroup.class,UpdateGroup.class})
    16. private String name;
    17. /**
    18. * 品牌logo地址
    19. */
    20. @NotEmpty(groups = AddGroup.class)
    21. @URL(message = "logo必须是一个url地址",groups = {AddGroup.class,UpdateGroup.class})
    22. private String logo;
    23. /**
    24. * 介绍
    25. */
    26. private String descript;
    27. /**
    28. * 显示状态[0-不显示;1-显示]
    29. */
    30. @ListValue(vals = {0,1},groups = {UpdateStatusGroup.class})
    31. @NotNull
    32. private Integer showStatus;
    33. /**
    34. * 检索首字母
    35. */
    36. @NotEmpty(groups = AddGroup.class)
    37. @Pattern(regexp = "^[a-zA-Z]$",message = "检索首字母必须是首字母",groups = {AddGroup.class,UpdateGroup.class})
    38. private String firstLetter;
    39. /**
    40. * 排序
    41. */
    42. @NotEmpty(groups = AddGroup.class)
    43. @Min(value = 0,message = "排序必须大于等于0",groups = {AddGroup.class,UpdateGroup.class})
    44. private Integer sort;
    45. }

    1. /**
    2. * 保存
    3. */
    4. @RequestMapping("/save")
    5. public R save(@Validated({ AddGroup.class })@RequestBody BrandEntity brand, BindingResult result){
    6. if(result.hasErrors()){
    7. //1.获取校验错误的结果
    8. Map map = new HashMap<>();
    9. result.getFieldErrors().forEach((item)->{
    10. //FieldError获取到错误的提示
    11. String message = item.getDefaultMessage();
    12. //获取错误的属性的名字
    13. String field = item.getField();
    14. map.put(field,message);
    15. System.out.println("******");
    16. });
    17. return R.error(400,"提交的数据不合法").put("data",map);
    18. }
    19. brandService.save(brand);
    20. return R.ok();
    21. }
    1. /**
    2. * 修改
    3. */
    4. @RequestMapping("/update")
    5. public R update(@Validated(UpdateGroup.class)@RequestBody BrandEntity brand){
    6. brandService.updateById(brand);
    7. return R.ok();
    8. }

     

  • 相关阅读:
    Html + Express 实现大文件分片上传、断点续传、秒传
    openGauss学习笔记-84 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT部署服务器优化:x86
    Redis分片集群实验
    [附源码]计算机毕业设计作业查重系统Springboot程序
    发布vue3组件到npm
    Maven下载、安装、配置教程
    【计网】链路层
    重生之我是一名程序员 33
    Java 中各种异常的讲解和举例
    谈一谈Python中的装饰器
  • 原文地址:https://blog.csdn.net/m0_62436868/article/details/127419478