验证 AppSync 解析器模板中的数组输入
Validating array input in AppSync Resolver Template
我在我的 aws app-sync 中有一个查询:
input TestingInput {
user_ids: [String]!
}
现在,我需要在这里做 2 种不同的验证:
- 验证 user_ids 是一个字符串数组。
- 验证数据库中是否存在所有 user_ids。
对于1,我可以使用$util.isList()
,但是无法验证not是否为空串。有什么方法可以过滤掉数组中的空字符串,然后检查数组的长度吗?
对于 2,目前还不知道
Velocity 脚本可以访问一些 Java API。在这种情况下,它们是 lists, and strings. However, I'm not sure what Java version AppSync supports. From AWS documentation, it's being linked to Java SE 6。回到你的问题,它是通过有一个新列表,并在其中添加非空 ids 来完成的。
#set( $nonEmptyUserIds = [] )
#foreach( $userId in $userIds )
#set( $trimmedUserId = $userId.trim() )
#if( $trimmedUserId.length() != 0 )
$util.qr( $nonEmptyUserIds.add($trimmedUserId) )
#end
#end
由于它是针对您的数据库的检查,因此您需要一个用于解析器的数据源,以及一个用于请求映射的数据库查询。如果您的数据库是 RDS,那么您可以使用 SELECT。如果是 DyanmoDb,那么 BatchGetItem 是正确的选择。
在响应映射中,您应该有数据库结果来验证提交的用户 ID。
我在我的 aws app-sync 中有一个查询:
input TestingInput {
user_ids: [String]!
}
现在,我需要在这里做 2 种不同的验证:
- 验证 user_ids 是一个字符串数组。
- 验证数据库中是否存在所有 user_ids。
对于1,我可以使用$util.isList()
,但是无法验证not是否为空串。有什么方法可以过滤掉数组中的空字符串,然后检查数组的长度吗?
对于 2,目前还不知道
Velocity 脚本可以访问一些 Java API。在这种情况下,它们是 lists, and strings. However, I'm not sure what Java version AppSync supports. From AWS documentation, it's being linked to Java SE 6。回到你的问题,它是通过有一个新列表,并在其中添加非空 ids 来完成的。
#set( $nonEmptyUserIds = [] ) #foreach( $userId in $userIds ) #set( $trimmedUserId = $userId.trim() ) #if( $trimmedUserId.length() != 0 ) $util.qr( $nonEmptyUserIds.add($trimmedUserId) ) #end #end
由于它是针对您的数据库的检查,因此您需要一个用于解析器的数据源,以及一个用于请求映射的数据库查询。如果您的数据库是 RDS,那么您可以使用 SELECT。如果是 DyanmoDb,那么 BatchGetItem 是正确的选择。
在响应映射中,您应该有数据库结果来验证提交的用户 ID。