我想用另一个字符串替换Velocity Template Language中的一部分字符串.
例如:
#set($a = "Hello")
#set($b = "+")
Run Code Online (Sandbox Code Playgroud)
我想用Hello替换ll中的ll.输出应该是He ++ o
请帮我
谢谢基肖尔
我们在Web应用程序中大量使用Velocity.虽然很容易调试Java方面并确保正确填充Velocity Context,但是能够在合并步骤中逐步解析VTL,设置断点等是非常有价值的.是否有任何工具或者IDE/IDE插件可以通过VTL(Velocity Template Language)实现这种功能吗?
道歉,如果我胡扯或谈论一些乱七八糟但我是速度新手,这些论坛!
我需要检查某个字符串的内容,如果出现,则输出文本的第二部分.例如:
set ($string = "This is a long string *** but I only want to output this on my email").
Run Code Online (Sandbox Code Playgroud)
我想输出3个星号后的所有文字.我已经在论坛上搜索过,但是找不到任何可以完全帮助我的东西.
这是我的对象类:
public class Address
{
public final String line1;
public final String town;
public final String postcode;
public Address(final String line1, final String town, final String postcode)
{
this.line1 = line1;
this.town = town;
this.postcode = postcode;
}
}
Run Code Online (Sandbox Code Playgroud)
我将它添加到速度上下文中,如下所示:
Address theAddress = new Address("123 Fake St", "Springfield", "SP123");
context.put("TheAddress", theAddress);
Run Code Online (Sandbox Code Playgroud)
但是,在编写模板时,以下内容不会呈现地址字段(但是,当我将getter添加到Address类时,它可以正常工作)
<Address>
<Line1>${TheAddress.line1}</Line1>
<Town>${TheAddress.town}</Town>
<Postcode>${TheAddress.postcode}</Postcode>
</Address>
Run Code Online (Sandbox Code Playgroud)
是否可以在不添加getter的情况下访问Velocity上的对象的公共字段?
我正在为AWS API Gateway集成响应编写映射模板.我想将一个键/值对添加到我的Lambda函数返回的JSON对象.
我的函数返回一些像这样的JSON:
{
"id": "1234",
"name": "Foo Barstein"
}
Run Code Online (Sandbox Code Playgroud)
我想模板输出这样的东西:
{
"id": "1234",
"name": "Foo Barstein",
"href": "https://example.tld/thingy/1234"
}
Run Code Online (Sandbox Code Playgroud)
我的映射模板如下所示:
#set($thingy = $input.json('$'))
#set($thingy.href = "https://example.tld/thingy/$thingy.id")
$thingy
Run Code Online (Sandbox Code Playgroud)
但是,我的模板输出未修改$thingy,没有href我试图添加.
我已阅读VTL用户指南,但无济于事.
我不确定如何使用 Velocity 模板语言实现以下目标。
本质上,我想检查给定列表/数组中是否存在给定值。在 C# 中,它相当于.Any()or.Contains()方法。
#set($myValues = ["apple", "banana", "strawberry"])
#foreach($i in $items)
$myValues.any($i) <= better way to achieve this??
or something like this
$myValues.contains($i)
#end
Run Code Online (Sandbox Code Playgroud)
当然,我可以使用多个if...else...条件并循环遍历列表来检查某个值是否存在,但代码很快就会变得混乱(如果查找列表很大)。有没有更好的方法来做到这一点?
考虑以下 GraphQL 模板:
type Foo {
id: ID!
bars: Bars
}
type Bar {
id: ID!
name: String!
}
type Bars {
items: [Bar]!
nextToken: String
}
Run Code Online (Sandbox Code Playgroud)
barsFoo 类型字段的映射模板如下所示:
#set($ids = [])
#foreach($id in $context.source.bars)
#set($map = {})
$util.qr($map.put("id", $util.dynamodb.toString($id)))
$util.qr($ids.add($map))
#end
{
"version" : "2018-05-29",
"operation" : "BatchGetItem",
"tables" : {
"barsTable" : {
"keys": $util.toJson($ids),
"consistentRead": true
}
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用。但是如果bars字段包含和空数组[],模板显然会崩溃并出现以下错误:
"errors": [
{
"path": [
"getFoo",
"bars"
],
"data": null,
"errorType": "MappingTemplate", …Run Code Online (Sandbox Code Playgroud) 这甚至可能吗?
你好朋友。我正在使用 AWS AppSync + DynamoDB 构建应用程序,并且我开始拥有大量解析器映射模板,所有这些模板都是使用 Apache Velocity 模板语言 (VTL) 编写的。
我开始担心的是,这些 vtl 文件对应用程序非常重要(因为它们定义了如何检索数据)并且其中一个错误可能会造成严重破坏。所以就像系统的任何关键部分一样......我想为他们编写一些自动化的单元测试。但我还没有发现其他人这样做。
提前致谢!
unit-testing vtl amazon-dynamodb aws-appsync velocity-template-language