我正在使用 struts 2 和 velocity 模板生成 JSON 响应。 现在要注意的是响应不是使用某些速度 JSON 插件生成的 它只是一个字符串,一旦 velocity 完成它的解析和渲染就会出现 响应,并在客户端执行 eval 以获取从字符串到 JSON 的响应。
我真正需要的是速度或支柱方面的一些解决方案,一旦结果是 由 velocity 生成,框架应该调用我的 API,我可以在其中使用我自己的逻辑将 vm 文件的响应输出转换为 JSON。如何实现这一目标?
例如:
getComments()
操作 API,并将用评论对象(比如 cmt)填充 arrayList。现在在 vm 中我正在编写这样的代码:
{ "CommentsData" : [
#set($sep="")
#foreach($c in $cmt)
$sep
{
"commentText" : $c.getText()
}
#set($sep=",")
#end
}
现在最终的响应可能是这样的:
{ "CommentsData" : [
{
"commentText" : "This is comment 1"
},
{
"commentText" : "This is comment 2"
},
{
"commentText" : "This is comment 3"
},
{
"commentText" : "This is comment 4"
}`
]
}
现在这可能看起来像 JSON,但它不是严格的 JSON;我的意思是如果我错过
一些 ,
然后在 JavaScript 客户端的某处,我的 eval 可能会失败或 JSON.parse()
会失败,但在 velocity 模板上,我现在知道 JSON 是否格式错误。
因此,一旦生成了上述速度模板,我就需要一些控制,我可以在其中编写一些 Java 代码来对响应进行一些验证。
我发现我使用速度模板生成 JSON 输出(实际上是一个看起来像 JSON 的字符串)的方法可能是错误的。但我仍然需要处理我编写的每个速度模板的响应。
最佳答案
不确定您如何使用速度。我们在输出 JSON 时不使用 velocity;我们只是创建一个 JSON 可转换对象并使用 response.write(jsonObject.toJson())
直接从 Controller 输出它。这样,始终会生成正确的 JSON。
https://stackoverflow.com/questions/8815370/