我正在使用 struts 2 和 velocity 模板生成 JSON 响应。 现在要注意的是响应不是使用某些速度 JSON 插件生成的 它只是一个字符串,一旦 velocity 完成它的解析和渲染就会出现 响应,并在客户端执行 eval 以获取从字符串到 JSON 的响应。
我真正需要的是速度或支柱方面的一些解决方案,一旦结果是 由 velocity 生成,框架应该调用我的 API,我可以在其中使用我自己的逻辑将 vm 文件的响应输出转换为 JSON。如何实现这一目标?
例如:
- 在使用 JavaScript 的浏览器上,我设计了一个树形小部件,用于以树形结构显示评论。
- 假设用户点击评论按钮。
- 我的 UI 小部件将触发 AJAX 以获取评论数据。
- 此请求被 STRUTS 2 框架拦截。
- 它将调用,比方说,
getComments()
操作 API,并将用评论对象(比如 cmt)填充 arrayList。 - 现在响应由速度模板 (*.vm) 处理。
现在在 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。
关于json - 将速度响应转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8815370/