首页 > 解决方案 > GroovyTemplate 作为 SpringMVC 的视图技术可以创建 JSON 吗?

问题描述

我想将我的 java 数据类序列化为 JSON。老实说,我 几天前发布了一个相关问题,但是到目前为止我还没有得到答案。目前,所有答案都暗示了杰克逊的注释。但我不喜欢直接让类参与,我认为最好将这项工作委托给视图。

尽管如此,我发现 SpringMVC 支持 GroovyTemplate 并且我在处理 Groovy 模板和构建器方面有着愉快的体验,因此我对它们有很好的了解。但我可以找到仅构建 html 文件的 Groovy 模板。所有示例都以类似的行开头,如下所示:

html {
      head {
      title( ... )
...
      }
}

有没有办法在提供 JSON 的 SpringMVC 上下文中编写 Groovy 模板?例如,诸如 Grails JSON 视图之类的称为 gson 文件的内容(请参阅此处

感谢大家的关注。

标签: javaspring-mvcgrailsgroovy

解决方案


Groovy 本身具有很好的生成 json 的功能。

您的类可以轻松转换为 json:

import groovy.json.*

class SomeClass{
   String name
   int value
   List someList = ['value1', 'value2', 'value3']
}

assert JsonOutput.toJson(new SomeClass(name:'myClass', value: 3)) == 
'{"value":3,"someList":["value1","value2","value3"],"name":"myClass"}'

创建自己的模板引擎也很容易。例如:

def SOME_CLASS_TEMPLATE = {SomeClass someClass->
   [
      the_json:[
         message: 'Message',
         name: someClass.name,
         first_list_value: someClass.someList?.getAt(0)
      ]
   ]
}

assert JsonOutput.toJson(SOME_CLASS_TEMPLATE(new SomeClass(name:'myClass', value: 3))) == 
'{"the_json":{"message":"Message","name":"myClass","first_list_value":"value1"}}'

格式化的 json 输出:

assert JsonOutput.prettyPrint(JsonOutput.toJson(SOME_CLASS_TEMPLATE(new SomeClass(name:'myClass', value: 3)))) == 
'''{
    "the_json": {
        "message": "Message",
        "name": "myClass",
        "first_list_value": "value1"
    }
}'''

还要检查groovy.json包(JsonGeneratorJsonBuilder)中的其他类,它们可能更适合您的任务。


推荐阅读