在grails 2.3.x中使用RestAPI JSON

时间:2015-08-31 09:43:12

标签: json rest grails grails-2.3

我是grails的新手,我正在学习。我想使用webservice API(Rest)。 我搜索了这个例子,但没有得到一个好的。 我的要求是: 要使用的地址是:localhost:8080 / order / createOrder;这将提供JSON。 我的JSON格式为:

  //and from JSON is:
username: 'abc',
        password: 'xyz',
        order: {
         orderDate
            orderNumber
            subTotal
            shipping
            discount
            netTotalPaid
            creditApplied
           transactionId
           specialInstruction
        }

我必须从JSON获取用户名,密码和订单。 Order是一个Domain类,我将在其中设置JSON数据。

请给我一个详细解释。

如果JSON不是REST服务,即应用程序本身提供JSON作为服务? ,如果我们不需要使用REST服务?

2 个答案:

答案 0 :(得分:1)

获取JSON

再次,几个选项。我喜欢使用REST Client Builder Plugin来做这类事情。它配备了许多实用方法,让您的生活更轻松。

例如,要从终点获取JSON,它将类似于:

def resp = rest.get("http://grails.org/api/v1.0/plugin/acegi/")
def myJson = resp.json;

使用JSON

有几个选择。

如果Order是一个完全映射到这些值的域类,那么您可以使用GSON插件。这样可以对POJO(或grails域对象)进行序列化和反序列化。用法的一个例子是:

Gson gson = new GsonBuilder().create()

Order myOrder = gson.fromJson(myJsonData, Order.class)

println myOrder

或者如果你想保留Grails,你可以使用转换器..

def myOrder = new Order(request.GSON);

就个人而言,我更喜欢前者。

设计提示

  • 不要将所有这些东西放在控制器中。将其抽象为服务,以便您的控制器将其简单地传递给服务层,而不关心它发生了什么。

  • 将您的URL放在某种对象或字符串中的RESTful服务中。如果您更改API端点,则不必在应用程序上更新它。

额外阅读

  • 您可以在GSON plugin home找到要添加到构建配置的依赖项。

  • The Docs将向您展示如何使用GSON插件。

  • And these Docs将向您展示如何使用REST Client Builder插件。

答案 1 :(得分:0)

我想这会有所帮助..

def restBuilder = new RestBuilder()
def resp = restBuilder.get("http://localhost:8080/order/createOrder")
JSONObject mapData = data.getJSONObject(resp.json)
JsonSlurper slurper = new JsonSlurper()
def object = slurper.parseText(mapData.toString())
def order = Order(object)

这里的订单是pojo类