在 Groovy/Grails 中使用 JSON 创建对象
Posted
技术标签:
【中文标题】在 Groovy/Grails 中使用 JSON 创建对象【英文标题】:Using JSON to create an object in Groovy/Grails 【发布时间】:2011-11-13 22:14:36 【问题描述】:我有一个 Groovy/Grails 网站,用于通过 JSON 向 android 客户端发送数据。我已经创建了 Android 客户端和 Groovy/Grails 网站;他们可以在 JSON 中输出相同的对象。
我可以通过将 JSON 输出映射到 Java 对象来成功地在 Android 中创建相应的对象,但是我想知道是否可以使用 JSON 输出在 Groovy/Grails 中创建新的域对象?有没有办法将 JSON 输出传递给控制器操作,以便创建对象?
这是我要发送的 JSON 示例;
"class":"org.icc.callrz.BusinessCard.BusinessCard",
"id":1,
"businessCardDesigns":[],
"emailAddrs":[
"class":"org.icc.callrz.BusinessCard.EmailAddress",
"id":1,
"address":"chris@krslynx.com",
"businessCard":
"_ref":"../..",
"class":"org.icc.callrz.BusinessCard.BusinessCard"
,
"index":0,
"type":
"enumType":"org.icc.callrz.BusinessCard.EmailAddress$EmailAddressType",
"name":"H"
,
"class":"org.icc.callrz.BusinessCard.EmailAddress",
"id":2,
"address":"cb@i-cc.cc",
"businessCard":
"_ref":"../..",
"class":"org.icc.callrz.BusinessCard.BusinessCard"
,
"index":1,
"type":
"enumType":"org.icc.callrz.BusinessCard.EmailAddress$EmailAddressType",
"name":"W"
]
“类”与我要保存到的域匹配,ID 是域的 ID,然后需要使用类似的方法保存 businessCardDesigns 和 emailAddrs 中的每个项目(在域中 businessCardDesigns 和emailAddrs 是 ArrayLists)。非常感谢!
解决方案:
@RequestMapping(method = RequestMethod.POST, headers = "Accept=application/json")
public ResponseEntity<String> createFromJson(@RequestBody String json)
Owner.fromJsonToOwner(json).persist();
return new ResponseEntity<String>(HttpStatus.CREATED);
【问题讨论】:
【参考方案1】:在我看来,使用内置的 Grails JSON 转换器比其他答案更容易:
import grails.converters.JSON
class PersonController
def save =
def person = new Person(JSON.parse(params.person))
person.save(flush:true)
其他好处是:
无需在任何配置文件中乱七八糟 如有必要,可以在分配属性之前操作生成的 JSON 对象 在代码中发生的事情要清楚得多(我们正在解析 JSON 对象并在 Person 实体上设置属性)【讨论】:
固定导入路径:import grails.converters.JSON 感谢您发现这个错字。 @OverZealous - 正是我想要的。谢谢。【参考方案2】:我知道你已经接受了一个答案,但如果我没看错你的问题,那么有一个内置的“Grails”方法可以做到这一点。
在 URLMappings.groovy 中为您的操作创建一个条目并打开请求解析。例如,我像这样创建 RESTful 映射:
"/api/bizCard/save"(controller: "businessCard", parseRequest: true)
action = [POST: "save"]
然后在你的控制器中
def save =
def businessCardInstance = new BusinessCard(params.businessCard)
....
businessCardInstance.save(flush:true)
【讨论】:
这看起来很有用;谢谢你的贡献。我会在星期一试一试。 :)【参考方案3】:这可能对你有用
http://static.springsource.org/spring-roo/reference/html/base-json.html
【讨论】:
以上是关于在 Groovy/Grails 中使用 JSON 创建对象的主要内容,如果未能解决你的问题,请参考以下文章
使用 Groovy(Grails) 写入文件对于某些行(断行)失败
Groovy/grails 如何使用 jquery 从视图中调用控制器方法
使用 Quartz 调试 Groovy/Grails 应用程序中的堆空间问题
如何在 Groovy/Grails 上实现社交网络登录? [关闭]