【问题标题】:Consuming a RestAPI JSON in grails 2.3.x在 grails 2.3.x 中使用 RestAPI JSON
【发布时间】:2015-08-31 09:43:12
【问题描述】:

我是 grails 新手,我正在学习。我想使用 Web 服务 API(Rest)。 我搜索了这个例子,但没有得到一个好的例子。 我的要求是: 要消费的地址是 eg: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 服务?

【问题讨论】:

    标签: json rest grails grails-2.3


    【解决方案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);
    

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

    设计技巧

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

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

    补充阅读

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

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

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

    【讨论】:

    • 非常感谢您的回复。那么如果JSON内容和Domain类的结构不一样,怎么办?就像有:用户名、密码和订单数组;如何获取数据?我理解了您的前两行代码以及如何从“def myJson”获取 JSON 数据?
    • 嗯,你在myJson 中得到的不是String,而是JSONObject。您可以通过键获取值,如果您的订单在名为order 的键中,则可以使用JSONObject API 获取order JSON 并将其转换为域对象。
    【解决方案2】:

    我想这会有所帮助..

    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)
    

    这里的 Order 是 pojo 类

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 2014-04-26
      • 1970-01-01
      • 2013-10-22
      • 2023-03-03
      相关资源
      最近更新 更多