更清洁的方式在调用服务时使用RestBuilder的多个选项

时间:2016-05-13 03:21:26

标签: rest grails

我有以下代码,我想以易于管理和易于理解的方式编写代码。

RestBuilder rest = new RestBuilder()

if (someoption()) {
  rest = rest.post(someurl) {
   contentType: application/json
   json {
     payload1: somepayload
     payload2: somepayload1
   }
  }
}
else {
  rest = rest.post(someurl) {
   contentType: application/json
   json {
     payload4: somepayload4
   }
  }
}

if / else中唯一不同的是json有效负载。上面只显示了一个if / else,但是,在我的实际代码中我有多个。

有没有简单的方法来管理它?我在JSON闭包中尝试了puttind条件语句,但它没有工作

1 个答案:

答案 0 :(得分:2)

以下是您可以使用的广义休息调用方法:

RestResponse rest(String method, String url, Closure jsonData = null) {
   RestBuilder rest = new RestBuilder()
   rest."$method"(url) {
      contentType: "application/json"
      if (jsonData) {
         json {
            jsonData.delegate = delegate
            jsonData()
         }
      }
   }
}

你可以用

来调用它
RestResponse response
if (someoption()) {
   response = rest('post', someurl) {
      payload1: somepayload
      payload2: somepayload1
   }
}
else {
   response = rest('post', someurl) {
      payload4: somepayload4
   }
}

def json
if (someoption()) {
   json = {
      payload1: somepayload
      payload2: somepayload1
   }
}
else {
   json = {
      payload4: somepayload4
   }
}

RestResponse response = rest('post', someurl, json)