incloud开发文档 5.1.0 Help

校验相关

系统中参数校验,提供了便捷的参数校验功能。如果参数校验失败,平台会自动返回相应的错误响应。可以轻松实现参数校验功能,确保你的应用程序接受有效的输入。

为什么需要参数校验

完整性:参数校验可以确保用户提供的数据书完整的,没有丢失必要的信息。 安全性:防止恶意输入和攻击。如SQL注入,跨站脚本攻击等等。 数据质量:参数校验可以提高数据的质量,减少无效或损坏的数据进入系统。 用户友好性:通过校验、可以提供更好的错误信息,让用户更容易理解并修复输入错误。

参数校验

校验类型

  • 基本数据类型

  • map 结构

  • list 集合

  • IDto实现类基本上包含了所有常用的数据类型

示例

Java POJO 定义中引入注解,@Valid 标定需要校验的数据,是否可以为空和最大长度等一系列属性;

@Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Valid { /** * 是否不为空,可自定义提示不为空的内容 * @return */ String nullMsg() default ""; /** * 长度限定 * @return */ int length() default 0; /** * 唯一限制,这个是service层使用的,需要查数据库 * @return */ boolean unique() default false; boolean ifNotNullThenCheck() default false; }

定义Dto类

public class DemoPurchaseDto extends WfDto{ public DemoPurchaseDto(Args args){ super(args); } @Valid(length = 10 ,nullMsg="采购单号不能为空") @Schema(description="采购单号") private Integer serNumber; @Valid(length = 255 ,nullMsg="申请原因不能为空") @Schema(description="申请原因") private String reason; //。。。。。省略其它字段信息 }

Controller 使用 在你的控制器(controller)中使用参数校验,你可以在方法参数上添加 '@Validation' 注解来触发参数校验;

@Operation(summary = "新增采购申请单") @PostMapping public Result<DemoPurchaseVo> save(@Validation @RequestBody DemoPurchaseDto demoPurchaseDto) { return Result.success(demoPurchaseService.save(demoPurchaseDto)); }

校验包含和排除

@ExcludeAnntation

在对应Java Bean里加上@valid注解后,平台会校验字段的非空,这么写的作用大多数情况肯定是相应接口需要校验这个字段,但在某些特殊接口可能不需要校验,比如:查询接口、更新接口(只校验部分数据)等,那么就需要排除掉某些字段,或所有字段等,参考下面示例: 排除掉WfEngineDto中的"taskId","innerVariable","bizInfoDto"这三个字段;

@ApiOperation(value = "调整 新闻通告类内容发布提交") @PostMapping("/procSubmit") public Result<Boolean> procSubmit(@Validation(exclude = {@ExcludeAnntation(clazz = WfEngineDto.class, vars = {"taskId","innerVariable","bizInfoDto"})} ) @RequestBody PortalContentAdjNewsDto portalContentAdjNewsDto) { log.debug("调整 新闻通告类内容发布提交"); return Result.success(portalContentAdjNewsService.procSubmit(portalContentAdjNewsDto)); }

排除掉所有字段

@PostMapping("/dictType") @ApiOperation(value = "新增") public Result addDictType(@Validation(exclude = @ExcludeAnntation(VarConstants.ALL), include = @IncludeAnntation(vars = {"dictCode", "dictName"})) @RequestBody DictDto dictDto) { return Result.success(dictService.addDictType(dictDto)); }

@IncludeAnntation

IncludeAnntation跟ExcludeAnntation功能正好相反,如果字段中没有配置@Valid,但接口想要校验此字段,可以加入@IncludeAnntation,@IncludeAnntation内置属性跟@ExcludeAnntation是一样的 示例: 排除掉所有字段,但检验id字段

@PutMapping("/dictType") @ApiOperation(value = "编辑") public Result editDictType(@Validation(exclude = @ExcludeAnntation(VarConstants.ALL), include = @IncludeAnntation(vars = {"id"})) @RequestBody DictDto dictDto) { return Result.success(dictService.editDictType(dictDto)); }
Last modified: 20 一月 2025