CAP 支持服务器端输入验证。这通过注释进行控制,其中一些注释在以下部分中显示。有关超出此处所讨论内容的信息,请参阅 CAP 文档。
在本学习中,我们将涵盖以下注释:
- @mandatory
- @assert.target
- @assert.range
Objective
CAP 支持服务器端输入验证。这通过注释进行控制,其中一些注释在以下部分中显示。有关超出此处所讨论内容的信息,请参阅 CAP 文档。
在本学习中,我们将涵盖以下注释:
我们从注释 @mandatory 开始。对标记为 @mandatory 的元素进行非空输入检查:null 和(已修剪)空字符串被拒绝。

在所示示例中,Books 实体的标题元素使用 @mandatory 进行注释。如果尝试创建不含标题的工作簿,则相应请求会返回 HTTP 状态代码为 400(请求错误)的响应。响应包含类似于以下内容的错误消息:
123456"error": {
"code": "400",
"message": "Value is required",
"target": "title",
"@Common.numericSeverity": 4
}注意
与在 SQL 中一样,如果没有为给定元素指定任何值,则可以指定要根据 INSERT 填充的缺省值。关键字 default 可用于此目的。在上一示例中,如果在创建新工作簿时没有为此元素提供值,则为 Books 实体的 stock 元素设置值 0。
@assert.target 注释可用于 CDS 模型实体的托管对一关联。使用 注释在 CREATE 和 UPDATE 操作期间检查是否存在关联引用的目标实体。换句话说,使用此注释来确保表中的非空外键在关联/引用的目标表中具有对应的主键。

在所示示例中,Books 实体的托管对一关联作者使用 @mandatory 和 @assert.target 进行注释。@mandatory 注释确保指定了书作者。@assert.target 注释还会检查指定作者是否存在。
如果尝试创建新工作簿,并且请求中指定的作者 ID 在数据库中不存在,则不会执行请求的 CREATE 操作。相反,HTTP 响应的状态代码为 400(错误请求),因为我们已使用 @mandatory 注释看到。响应正文包含类似于以下内容的错误消息。它指向无效外键:
123456"error": {
"code": "400",
"message": "Value doesn't exist",
"target": "author_ID",
"@Common.numericSeverity": 4
}@assert.range 注释允许为序号类型为(即数字或日期/时间类型)的模型实体元素指定值范围。该值范围定义为间隔,语法如下:
1@assert.range: [min, max]定义的范围被视为闭区间,即检查指定值是否大于或等于最小值且小于或等于最大值。
对于枚举元素,可以指定 true 以将可能的值限制为定义的枚举值。

在所示示例中, Books 实体的 genre 元素具有数据类型 Genre,它是具有枚举值的自定义类型。使用 @assert.range: true 对基因元素进行注释可确保只能为此元素指定来自枚举的值,即 1 或 2。
例如,如果在创建工作簿时为类型元素提供了值 3,则不会执行请求的 CREATE 操作。相反,HTTP 响应的状态代码为 400(请求错误),并且响应正文包含类似于以下内容的错误消息:
123456"error": {
"code": "400",
"message": "Value 3 is invalid according to enum declaration {1, 2}",
"target": "genre",
"@Common.numericSeverity": 4
}注意
在练习中,在 SAP Business Application Studio 中自行执行以下演示中的分步说明。
作为练习的起点,如果成功完成,请使用之前的练习使用本地化数据、代码清单和通用重用类型的结果。或者,您还可以使用以下 GitHub 资源库中的分支 7_localized_data 作为起点:
https://github.com/SAP-samples/cap-development-learning-journey
可在 GitHub 资源库的 8_input_validation 分支中找到模拟的完整实施。
有关资源库内容及其使用方法的详细信息,可在此处找到。
观看视频,了解如何实施输入验证。