【代码优化】IoT: 物模型参数校验

This commit is contained in:
puhui999 2025-03-24 17:37:22 +08:00
parent 343353b8f8
commit d155876f09
6 changed files with 48 additions and 34 deletions

View File

@ -174,7 +174,7 @@ GET {{baseUrl}}/iot/product-thing-model/get?id=67
tenant-id: {{adminTenentId}}
Authorization: Bearer {{token}}
### 请求 /iot/product-thing-model/tsl-by-product-id 接口 => 成功
GET {{baseUrl}}/iot/product-thing-model/tsl-by-product-id?productId=1001
### 请求 /iot/product-thing-model/get-tsl 接口 => 成功
GET {{baseUrl}}/iot/product-thing-model/get-tsl?productId=1001
tenant-id: {{adminTenentId}}
Authorization: Bearer {{token}}

View File

@ -1,6 +1,10 @@
package cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -16,18 +20,17 @@ import java.util.List;
@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段从而避免重复
public class ThingModelArrayDataSpecs extends ThingModelDataSpecs {
/**
* 数组中的元素个数
*/
@NotNull(message = "数组元素个数不能为空")
private Integer size;
/**
* 数组中的元素的数据类型可选值structintfloatdouble text
*/
@NotEmpty(message = "数组元素的数据类型不能为空")
@Pattern(regexp = "^(struct|int|float|double|text)$", message = "数组元素的数据类型必须为struct、int、float、double 或 text")
private String childDataType;
/**
* 数据类型childDataType为列表型 struct 的数据规范存储在 dataSpecsList
* 此时 struct 取值范围为intfloatdoubletextdateenumbool
*/
@Valid
private List<ThingModelDataSpecs> dataSpecsList;
}

View File

@ -1,6 +1,9 @@
package cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -16,16 +19,12 @@ import lombok.EqualsAndHashCode;
@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段从而避免重复
public class ThingModelBoolOrEnumDataSpecs extends ThingModelDataSpecs {
// TODO @puhui999要不写下参数校验这样注释可以简洁一点
/**
* 枚举项的名称
* 可包含中文大小写英文字母数字下划线_和短划线-
* 必须以中文英文字母或数字开头长度不超过 20 个字符
*/
@NotEmpty(message = "枚举项的名称不能为空")
@Pattern(regexp = "^[\\u4e00-\\u9fa5a-zA-Z0-9][\\u4e00-\\u9fa5a-zA-Z0-9_-]{0,19}$",
message = "枚举项的名称只能包含中文、大小写英文字母、数字、下划线和短划线,必须以中文、英文字母或数字开头,长度不超过 20 个字符")
private String name;
/**
* 枚举值
*/
@NotNull(message = "枚举值不能为空")
private Integer value;
}

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.validation.constraints.Max;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -20,6 +21,7 @@ public class ThingModelDateOrTextDataSpecs extends ThingModelDataSpecs {
* 数据长度单位为字节取值不能超过 2048
* dataType text 需传入该参数
*/
@Max(value = 2048, message = "数据长度不能超过 2048")
private Integer length;
/**
* 默认值可选参数用于存储默认值

View File

@ -1,6 +1,8 @@
package cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -18,18 +20,21 @@ public class ThingModelNumericDataSpec extends ThingModelDataSpecs {
/**
* 最大值需转为字符串类型值必须与 dataType 类型一致
* 例如 dataType int 取值为 "200"而不是 200
*/
@NotEmpty(message = "最大值不能为空")
@Pattern(regexp = "^-?\\d+(\\.\\d+)?$", message = "最大值必须为数值类型")
private String max;
/**
* 最小值需转为字符串类型值必须与 dataType 类型一致
* 例如 dataType int 取值为 "0"而不是 0
*/
@NotEmpty(message = "最小值不能为空")
@Pattern(regexp = "^-?\\d+(\\.\\d+)?$", message = "最小值必须为数值类型")
private String min;
/**
* 步长需转为字符串类型值必须与 dataType 类型一致
* 例如 dataType int 取值为 "10"而不是 10
*/
@NotEmpty(message = "步长不能为空")
@Pattern(regexp = "^-?\\d+(\\.\\d+)?$", message = "步长必须为数值类型")
private String step;
/**
* 精度 dataType float double 时可选传入

View File

@ -1,7 +1,11 @@
package cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.module.iot.enums.thingmodel.IotThingModelAccessModeEnum;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -17,35 +21,36 @@ import java.util.List;
@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段从而避免重复
public class ThingModelStructDataSpecs extends ThingModelDataSpecs {
/**
* 属性标识符
*/
@NotEmpty(message = "属性标识符不能为空")
@Pattern(regexp = "^[a-zA-Z][a-zA-Z0-9_]{0,31}$", message = "属性标识符只能由字母、数字和下划线组成,必须以字母开头,长度不超过 32 个字符")
private String identifier;
/**
* 属性名称
*/
@NotEmpty(message = "属性名称不能为空")
private String name;
/**
* 云端可以对该属性进行的操作类型
*
* 枚举 {@link IotThingModelAccessModeEnum}
*/
@NotEmpty(message = "操作类型不能为空")
@InEnum(IotThingModelAccessModeEnum.class)
private String accessMode;
/**
* 是否是标准品类的必选服务
*/
private Boolean required;
/**
* struct 数据的数据类型
*/
@NotEmpty(message = "数据类型不能为空")
@Pattern(regexp = "^(int|float|double|text|date|enum|bool)$", message = "数据类型必须为int、float、double、text、date、enum、bool")
private String childDataType;
/**
* 数据类型dataType为非列表型intfloatdoubletextdatearray的数据规范存储在 dataSpecs
*/
@Valid
private ThingModelDataSpecs dataSpecs;
/**
* 数据类型dataType为列表型enumboolstruct的数据规范存储在 dataSpecsList
*/
@Valid
private List<ThingModelDataSpecs> dataSpecsList;
}