校验相关
系统中参数校验,提供了便捷的参数校验功能。如果参数校验失败,平台会自动返回相应的错误响应。可以轻松实现参数校验功能,确保你的应用程序接受有效的输入。
为什么需要参数校验
完整性:参数校验可以确保用户提供的数据书完整的,没有丢失必要的信息。 安全性:防止恶意输入和攻击。如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