验证用户输入

Objective

After completing this lesson, you will be able to 使用注释验证用户输入

注释

CAP 支持服务器端输入验证。这通过注释进行控制,其中一些注释在以下部分中显示。有关超出此处所讨论内容的信息,请参阅 CAP 文档

在本学习中,我们将涵盖以下注释:

  • @mandatory
  • @assert.target
  • @assert.range

@必选

我们从注释 @mandatory 开始。对标记为 @mandatory 的元素进行非空输入检查:null 和(已修剪)空字符串被拒绝。

在所示示例中,Books 实体的标题元素使用 @mandatory 进行注释。如果尝试创建不含标题的工作簿,则相应请求会返回 HTTP 状态代码为 400(请求错误)的响应。响应包含类似于以下内容的错误消息:

JSON
123456
"error": { "code": "400", "message": "Value is required", "target": "title", "@Common.numericSeverity": 4 }

注意

与在 SQL 中一样,如果没有为给定元素指定任何值,则可以指定要根据 INSERT 填充的缺省值。关键字 default 可用于此目的。在上一示例中,如果在创建新工作簿时没有为此元素提供值,则为 Books 实体的 stock 元素设置值 0。

@assert.target

@assert.target 注释可用于 CDS 模型实体的托管对一关联。使用 注释在 CREATE 和 UPDATE 操作期间检查是否存在关联引用的目标实体。换句话说,使用此注释来确保表中的非空外键在关联/引用的目标表中具有对应的主键。

在所示示例中,Books 实体的托管对一关联作者使用 @mandatory@assert.target 进行注释。@mandatory 注释确保指定了书作者。@assert.target 注释还会检查指定作者是否存在。

如果尝试创建新工作簿,并且请求中指定的作者 ID 在数据库中不存在,则不会执行请求的 CREATE 操作。相反,HTTP 响应的状态代码为 400(错误请求),因为我们已使用 @mandatory 注释看到。响应正文包含类似于以下内容的错误消息。它指向无效外键:

JSON
123456
"error": { "code": "400", "message": "Value doesn't exist", "target": "author_ID", "@Common.numericSeverity": 4 }

@assert.range

@assert.range 注释允许为序号类型为(即数字或日期/时间类型)的模型实体元素指定值范围。该值范围定义为间隔,语法如下:

Code Snippet
1
@assert.range: [min, max]

定义的范围被视为闭区间,即检查指定值是否大于或等于最小值且小于或等于最大值

对于枚举元素,可以指定 true 以将可能的值限制为定义的枚举值。

在所示示例中, Books 实体的 genre 元素具有数据类型 Genre,它是具有枚举值的自定义类型。使用 @assert.range: true基因元素进行注释可确保只能为此元素指定来自枚举的值,即 12

例如,如果在创建工作簿时为类型元素提供了值 3,则不会执行请求的 CREATE 操作。相反,HTTP 响应的状态代码为 400(请求错误),并且响应正文包含类似于以下内容的错误消息:

Code Snippet
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 分支中找到模拟的完整实施。

有关资源库内容及其使用方法的详细信息,可在此处找到。

观看视频,了解如何实施输入验证。