是的,您之前已经听过了,但我还是张贴了它。我是Groovy和Grails的新手。我试图使用最佳实践创建一个Grails Restful Client App(最终是一个liferay portlet),它将能够拉出JSON并在漂亮的视图中呈现它。
我发现这个很棒的脚本,经过一些修改,至少从我们的第三方CRM供应商那里抽取对象作为JSON,真棒!所以它正在工作但是,如果我没有弄错的话,最好将像OATH部件这样的东西模块化为Grails服务,以便它可以用在多个控制器中?我想将下面(正常运行的)groovy脚本分解为Grails应用程序结构的正确部分,以便我有一个可扩展的应用程序遵循最佳实践。由于portlet插件的版本要求,我必须使用Grails 2.2.5。任何帮助砍下下面的代码并进入正确的控制器,服务和视图的任何帮助将不胜感激,并帮助我(和其他人)了解这是如何工作的。
以下是我认为最终会出现在服务中的内容
package school.infotech.edu
import groovyx.net.http.HTTPBuilder
import groovyx.net.http.HttpResponseException
import static groovyx.net.http.ContentType.URLENC
import static groovyx.net.http.Method.POST
import static groovyx.net.http.Method.GET
import static groovyx.net.http.ContentType.JSON
@Grapes(
@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.6')
)
def sf_login_domain = 'https://crm.thirdpartyvendor.com/'
def instance_domain
def access_token = ''
def consumer_key = 'BIGLONGKEYTHATWORKS'
def consumer_secret = 'SOMENUMBERSTHATWORK'
def auth_username = 'OURACCESSACCOUNTTHATWORKS'
def auth_password = 'WORKINGPASSWORD'
def auth_security_token = 'SECURITYTOKEN'
//Request Access_token and instance domain for work
def http = new HTTPBuilder(sf_login_domain)
def postBody = [
grant_type: 'password',
client_id: consumer_key,
client_secret: consumer_secret,
username: auth_username,
password: auth_password+auth_security_token
]
try{
http.post( path : 'services/oauth2/token',
body : postBody,
requestContentType: URLENC) { resp, json ->
access_token = json.access_token
instance_domain = json.instance_url +"/"
}
}catch(HttpResponseException e){
println "Error code: ${e.statusCode}"
println "Post form: $postBody"
}
println "Access Token $access_token"
println "Instance domain $instance_domain \n"
所以我认为这些东西可能在控制器或视图中,但我如何调用服务呢?
println "List API Resources \n"
http = new HTTPBuilder(instance_domain)
http.request(GET,JSON) { req ->
uri.path = 'services/data/v28.0/'
headers['Authorization'] = "Bearer $access_token"
response.success = { resp, json ->
assert resp.status == 200
json.each{ key,value ->
println "$key : $value"
}
}
response.failure = { resp, json ->
println resp.status
println json.errorCode
println json.message
}
}
println "List sobject Resources \n"
http.request(GET,JSON) { sobjectreq ->
uri.path = 'services/data/v28.0/sobjects/'
headers['Authorization'] = "Bearer $access_token"
response.success = { resp, json ->
assert resp.status == 200
json.each{ key,value ->
println "$key : $value \n"
}
json.objectDescribe.each{ key,value ->
println "$key : $value"
}
}
}
println "List chatter \n"
http.request(GET,JSON) { req ->
uri.path = 'services/data/v28.0/chatter'
headers['Authorization'] = "Bearer $access_token"
response.success = { resp, json ->
assert resp.status == 200
json.each{ key,value ->
println "$key : $value"
}
}
response.failure = { resp, json ->
println resp.status
println json.errorCode
println json.message
}
}
杰出的问题是
提前感谢您的帮助。
答案 0 :(得分:0)
进行REST调用的部分可以进入注入控制器的服务。注意我不推荐使用HTTPBuilder,因为它是一堆依赖项,你最好使用http://grails.org/plugin/rest-client-builder或https://github.com/jwagenleitner/groovy-wslite