跳到主要内容

标准数据域

提示
  • Nop 平台还处于开发阶段, 本文档中的实践方案可能会部分失效,但本人精力有限,无法及时跟进,请自行按照最新代码调整;
  • 您可以与智谱清言 AI 进行问答互动以了解 Nop 平台相关内容;
  • 若此文对您有很大帮助,请投币支持一下吧;
版权声明
  • Nop 内置标准数据域字典项的解析和校验在 SimpleStdDomainHandlersXplStdDomainHandlers 等中实现,并通过 StdDomainRegistry#registerStdDomainHandler 进行注册;
字典值字典名称
any任意

任意对象类型。实际对应的是 java.lang.Object

string字符串

字符串类型

bytes二进制字节数组

二进制字节数组类型。作为字符串存储时使用 Base64 编码

date日期

格式为 yyyy-MM-dd

time时间

格式为 HH:mm:ss

datetime日期时间

格式为 yyyy-MM-dd HH:mm:ss

timestamp时间戳

格式为 yyyy-MM-dd HH:mm:ss.zzz

generic-typeJava 泛型

Java 泛型类型,解析得到 IGenericType 类型。 例如 List<String>Map<String, io.nop.auth.entity.NopAuthUser> 等。 除了 Java 内置的 StringObjectListMapLong 等基础类型之外, 其他类名都需要使用全类名引用

class-nameJava 类名

package-namejava-name 组成,并以 . 分隔

package-nameJava 包名

. 号分隔,不包含除 $ 之外的特殊字符。 按照 Java 规范一般应为全小写字符

java-nameJava 标识

一般为中英文字母和数字、_ 组成,与 var-name 不同的是 java-name 允许包含字符 $

var-nameJava 变量名

一般为中英文字母和数字、_ 组成,不包含字符 .$。 只能以 _ 或字母开头

prop-nameJava 属性名

一般为中英文字母和数字、_ 组成,不包含字符 .$。 只能以 _ 或字母开头

prop-pathJava 复合属性名

由一个或者多个 prop-name 构成,并通过字符 . 来分隔

conf-name配置变量名

由英文字母、数字、_-. 构成, 不包含 $ 等特殊字符

xml-nameXML 标签/属性名

由英文字母、数字、_-:. 构成,不包含 $ 等特殊字符。 名字只能以 _ 或字母开头,并且 -:. 不能连续出现。 校验逻辑见 StringHelper#isValidXmlName

xplXpl 片段

其输出模式 outputModenone,不允许副作用输出。 其内容最终编译成 IEvalAction 类型。 实现逻辑见 XplStdDomainHandlers.XplNoneType

xpl-node输出 XNode 的 Xpl 片段

其输出模式 outputModenode,执行的过程中会输出 XNode 节点。 其内容最终编译成 IXNodeGenerator 类型。 实现逻辑见 XplStdDomainHandlers#XPL_NODE_TYPE

xpl-fnXpl 函数

自定义的 Lambda 函数,以 xpl-fn: (arg1: Arg1, arg2: Arg2) => any 包含函数签名的形式定义数据类型,如:

<!-- 可以忽略参数类型 -->
<validator xdef:value="xpl-fn: (value) => boolean" />

在编写其函数体时,可以通过 ${xxx} 形式引用指定的命名参数,如:

<validator><![CDATA[
return ${value} != 0;
]]></validator>

若是使用 Xpl 来输出 XNode 节点,则需要一个设置了 xpl:outputModenode 的节点包装一下:

<!-- <filter xdef:value="xpl-fn: (filter, query) => io.nop.core.lang.xml.XNode" /> -->
<filter>
<and xpl:outputMode="node">
<eq name="status" value="0" />
<gt name="age" value="20" />
</and>
</filter>

:其实现逻辑见 XplStdDomainHandlers.XplFnType

csv-set逗号分隔的字符串集合

, 分隔的字符串集合,最终转换为 Set<String> 类型。 若逗号之间为空白,则该项将被忽略,同时,分隔的每一项都会去掉首尾的空白。 处理逻辑见 SimpleStdDomainHandlers.CsvSetType#parseProp

multi-csv-set含与/或关系的字符串集合

,| 分隔的字符串集合,如 a,b|c|e,f,最终转换为 List<Set<String>> 类型,用以表达简单的, 列表)和| 列表)的关系, List<?> 内的元素之间为的关系,Set<?> 内的元素之间为的关系。 处理逻辑见 SimpleStdDomainHandlers.MultiCsvSetType#parseProp

word-set逗号分隔的字符串集合

csv-set 要求相同, 只是,其不能存在包含空白字符的项,否则,将会抛出校验异常。 校验逻辑见 SimpleStdDomainHandlers.WordSetType#isValidItem

tag-set逗号分隔的字符串集合

csv-set 要求相同。 校验逻辑见 SimpleStdDomainHandlers.TagSetType#parseProp

filter-bean过滤条件

由过滤运算符标签组成的过滤条件,其为 xml 结构,并且条件可嵌套,如:

<and>
<eq name="status" value="1" />
<gt name="age" value="10" />
</and>
field-selectionGraphQL 字段选择集合

GraphQL Field Selection 集合,用于指定可返回的字段,如:

userId, userName, status, relatedRoleList{ roleId, roleName, permissionList{ id, name } }
boolFlagBoolean 标记

标记数据为 Boolean 类型,但其实际类型可以为 NumberBooleanString,并最终转换为 Byte 类型。 转换逻辑见 SimpleStdDomainHandlers.BoolFlagType#parseProp