将速度响应转换为JSON

时间:2012-01-11 07:00:44

标签: json struts2 velocity

我正在使用struts 2和velocity模板来生成JSON响应。 现在捕获的是使用某个velocity JSON插件不生成响应 它只是一个String,一旦速度通过其解析和渲染完成就会出现 响应,并在客户端我做 eval 以获得从字符串到JSON的响应。

我真正需要的是对速度或支柱的一些解决方案,一旦结果如此 通过velocity生成,框架应该调用我的API,我可以使用自己的逻辑将vm文件的响应输出转换为JSON。怎么做到这一点?

例如:

  1. 在使用JavaScript的浏览器上,我设计了一个树形小部件,用于在树形结构中显示注释。
  2. 假设用户点击了评论按钮。
  3. 我的UI小部件将触发AJAX以获取评论数据。
  4. 此请求被STRUTS 2框架拦截。
  5. 它会调用getComments()动作API并填充一个带有注释对象的arrayList,例如cmt。
  6. 现在响应由速度模板(* .vm)处理。
  7. 现在在vm中,我正在编写这样的代码:

    { "CommentsData" : [
    
        #set($sep="")
        #foreach($c in $cmt)
        $sep
        {
            "commentText" : $c.getText()
        }
        #set($sep=",")
        #end
    
    }
    
  8. 现在最后的回复可能会像这样:

    { "CommentsData" : [
    
        {
            "commentText" : "This is comment 1"
        },
        {
            "commentText" : "This is comment 2"
        },
        {
            "commentText" : "This is comment 3"
        },
        {
            "commentText" : "This is comment 4"
        }`
    
        ]
    }
    
  9. 现在这可能看起来像JSON,但它不是严格的JSON;我的意思是,如果我想念 某些,某个地方然后在客户端使用JavaScript我的 eval 可能会失败或JSON.parse() 会失败,但在速度模板上我现在知道JSON是否格式错误。

  10. 因此,一旦生成了上述速度模板,我需要一些控制,我可以编写一些Java代码来对响应进行一些验证。

  11. 我看到我使用velocity模板生成JSON输出的方法(实际上是一个看起来像JSON的String)可能是错误的。但我仍然需要处理我写过的每个速度模板的响应。

1 个答案:

答案 0 :(得分:1)

不确定如何使用力度。输出JSON时我们不使用velocity;我们只是创建一个JSON可转换对象,并使用response.write(jsonObject.toJson())直接从控制器输出它。这样,始终生成适当的JSON。