`
sillycat
  • 浏览: 2539909 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Grails(15)How to Customized Marshaller

 
阅读更多
Grails(15)How to Customized Marshaller
SOAPUI eclipse plugin URL
http://www.soapui.org/eclipse/update

Use the POSTMAN in chrome to test the REST API

We can create the Marshaller class especially for one class

package com.sillycat.project.util.marshaller

import grails.converters.JSON

import org.codehaus.groovy.grails.web.converters.exceptions.ConverterException
import org.codehaus.groovy.grails.web.converters.marshaller.ObjectMarshaller
import org.codehaus.groovy.grails.web.json.JSONWriter

import com.sillycat.project.Store
import com.sillycat.project.util.Util

class StoreJSONMarshaller implements ObjectMarshaller<JSON> {

publicboolean supports(Object object) {
     if(object instanceof Store){
          return true;
     }
     return false;
}

publicvoid marshalObject(Object object, JSON converter)
throws ConverterException {
     def store = (Store)object
     JSONWriter writer = converter.getWriter();

     writer.object();

     def streetAddress = (store.address2 == null || store.address2.equals("")) ? store.address1 : store.address1 + ' ' + store.address2
     writer.key("address")
     writer.value([
          'state':store.state,
          'country': store.country,
          'streetAddress': streetAddress,
          city: store.city,
          postalCode: store.zip
     ])

     writer.key("id")
     writer.value(store.getId())

     writer.key("name")
     writer.value(store.storeName)

     writer.key("status")
     writer.value(store.enabled?'ENABLED':'DISABLED')

     writer.key("retailerStoreId")
     writer.value(store.storeCode)

     writer.key("geofences")

     def latitude = null;
     def longitude = null;

     if(store.geoFence != null && store.geoFence.center != null){
          latitude =  store.geoFence.center.latitude;
     }

     if(store.geoFence != null && store.geoFence.center != null){
          longitude = store.geoFence.center.longitude
     }

     writer.value([
          name: store.storeName,
          id: store.geoFence.id,
          type: "STORE",
          latitude: latitude,
          longitude: longitude,
          radius: store.geoFence.radius,
          ssid : store.ssid,
          bssid: store.bssid
     ])

     def brandCode = null
     //if(Util.getCurrentBrand() != null){
     //brandCode = Util.getCurrentBrand().getCode()
     //}
     //writer.key("brandCode")
     //writer.value(brandCode)

     writer.key("timezone")
     writer.value(store.timeZone == null ? null : store.timeZone.getID())

     writer.endObject();
     }
}

Here comes the test class:
@Test
publicvoid testGetSuccess() {
List<Store> stores = [
  new Store(storeCode:"TS1",storeName:"Test Store 1",enabled:true),
  new Store(storeCode:"TS2",storeName:"Test Store 2",enabled:true),
  new Store(storeCode:"TS3",storeName:"Test Store 3",enabled:false)]

mockDomain(Store, stores)

JSON.registerObjectMarshaller(new StoreJSONMarshaller(), 1)
registerMetaClass(Util)

def controller = new StoreController()
controller.params.id = 1
controller.apiGet()

assertEquals(controller.response.status, 200)
//System.out.println(controller.response.status)
//System.out.println(controller.response.contentAsString)

def actualStore = JSON.parse(controller.response.contentAsString)

assertNotNull(actualStore)
assertEquals("Test Store 1",actualStore.name)
}

In the configuration file, BootStrap.groovy
bootstrapService.registerCustomJSONMarshallers()

And here is the class BootstrapService.groovy

import grails.converters.JSON

import com.sillycat.project.util.marshaller.StoreJSONMarshaller

class BootstrapService {

static transactional = true

void registerCustomJSONMarshallers() {
  JSON.registerObjectMarshaller(new StoreJSONMarshaller(), 1)
}
}

References:
http://jwicz.wordpress.com/2011/07/11/grails-custom-xml-marshaller/
http://manbuildswebsite.com/2010/02/15/rendering-json-in-grails-part-3-customise-your-json-with-object-marshallers/
http://manbuildswebsite.com/2010/02/08/rendering-json-in-grails-part-2-plain-old-groovy-objects-and-domain-objects/

http://www.soapui.org/eclipse/update

分享到:
评论

相关推荐

    the definitive guide to grails 2

    《Grails 2 的终极指南》是一本深入探讨Grails框架精髓的专业书籍,该书以英文撰写,旨在为读者提供全面、深入的Grails框架学习资料。Grails框架基于Groovy语言,是一种高度动态、敏捷的Java应用开发框架,它简化了...

    The definitive guide to grails 2 英文版 书 代码

    《The Definitive Guide to Grails 2》是Grails框架深入学习的重要参考资料,由业界专家撰写,旨在为开发者提供全面、详尽的Grails 2技术指导。这本书结合了理论与实践,不仅介绍了Grails的基本概念,还涵盖了高级...

    Grails Grails Grails

    **Grails 框架详解** Grails 是一个基于 Groovy 语言的开源Web应用程序框架,它构建在Java平台之上,旨在简化开发过程并提高生产力。Grails 的设计深受Ruby on Rails的影响,提供了MVC(模型-视图-控制器)架构模式...

    Grails权威指南 Grails权威指南

    《Grails权威指南》是一本全面深入探讨Grails框架的专著,旨在帮助读者掌握这一强大的Web开发工具。Grails是一种基于Groovy语言的开源框架,它为构建现代、高效的应用程序提供了简洁高效的解决方案。本指南针对不同...

    Eclipse下搭建Grails项目

    【Grails项目搭建详解】 Grails是一个基于Groovy语言的开源Web应用框架,它简化了开发过程,尤其适合快速构建动态网站。在Eclipse中搭建Grails项目可能相对复杂,但通过以下步骤,即使是初学者也能顺利进行。 1. *...

    grails-用户手册

    《Grails用户手册》 Grails,作为一个基于Groovy语言的开源Web应用框架,深受开发者喜爱,它简化了Java开发的复杂性,提供了强大的MVC(Model-View-Controller)架构,以及丰富的插件系统。这份用户手册将帮助你...

    eclipse开发grails插件

    对于Grails开发,我们需要的是Eclipse中的Grails插件,它能够提供对Grails项目的创建、运行、调试等一系列功能。 **Grails**是基于Groovy语言的全栈式Web开发框架,它借鉴了Ruby on Rails的设计理念,提供了快速...

    grails中文入门简介

    Grails是一个基于Groovy语言的全栈框架,它遵循约定优于配置的原则,并且紧密集成Spring和Hibernate等流行的Java库,简化了开发流程。Grails在IT行业中尤其受到重视,因为它能够帮助开发者快速搭建并部署基于MVC模式...

    Beginning Groovy and Grails, From Novice to Professional

    本书《Beginning Groovy and Grails, From Novice to Professional》由Christopher M. Judd、Joseph Faisal Nusairat 和 James Shingler共同编写,并得到了Grails项目负责人Graeme Rocher的前言推荐。本书主要面向...

    Groovy轻松入门——Grails实战基础篇

    Grails home is set to: D:\D\MY_DEV\grails Base Directory: D:\Temp\grails_apps Environment set to production Note: No plugin scripts found Running script D:\D\MY_DEV\grails\scripts\CreateApp....

    grails快速开发web

    ### Grails 快速开发 Web 应用程序 #### 一、Grails 概述 Grails 是一种基于 Groovy 的开源应用框架,用于简化 Web 应用程序的开发过程。它采用约定优于配置的原则,这使得开发者可以更快地创建功能丰富的 Web ...

    Grails入门教程(二)

    在 Grails 中,我们可以使用 belongsTo 和 hasMany 两个关键字来定义域关系。belongsTo 用于定义一个域对象所属的其他域对象,而 hasMany 用于定义一个域对象拥有的多个其他域对象的引用。 二、域类设计 在设计域...

    grails-2.4.4.zip

    《Grails 2.4.4 框架深度解析》 Grails 2.4.4 是一个基于Java的开源Web应用框架,它利用Groovy语言的强大特性,为开发者提供了一种高效、灵活的开发环境。这个压缩包“grails-2.4.4.zip”包含了完整的Grails 2.4.4...

    Grails中文参考手册

    **Grails 概述** Grails 是一个基于 Groovy 语言的开源 web 应用程序框架,它构建在 Java 平台上,旨在提高开发效率,简化常见 Web 开发任务。Grails 遵循 Model-View-Controller (MVC) 架构模式,允许开发者快速...

    grails使用freemarker.rar

    压缩包内的“one2many”可能是一个示例或教程,涉及到一对一(one-to-one)、一对多(one-to-many)或多对一(many-to-one)的关系映射。在数据库设计中,这些关系是常见的实体间关联。在Grails与GORM中,处理这种...

    The definate guide to Grails

    《Grails 完全指南》:深入探索 Grails 框架的核心概念与实践 《Grails 完全指南》是 Grails 设计者 Graeme Rocher 和 Jeff Brown 联合编写的经典学习资料,旨在为开发者提供全面、深入的 Grails 框架理解和实践...

Global site tag (gtag.js) - Google Analytics