我了解在Grails中将业务逻辑与服务方法隔离的一般原则。我以前所有的Grails Web服务都没有入站JSON,XML等。目前,我需要使用JSON有效负载,其中包含{finish_time:2020-05-12T18:19:00Z,start_time:2020-05-14T18:19: 00Z},用于我的SQL。运行Grails 2.5.6。不幸的是,我不知道服务方法如何访问入站JSON有效负载数据。这必须很常见,但是我不理解从控制器到服务方法的数据传递/访问。我对Grails的了解不够深,以至于浪费您的时间来展示我的尝试。我尚未找到对从控制器入站https发布的JSON / XML数据进行工作的服务方法的任何示例/说明。在此先感谢您,对我而言,这似乎是一项非常基本的任务。
很遗憾,我不知道服务方法如何访问 入站JSON有效负载数据。这必须很常见,但我不是 了解从控制器到服务方法的数据传递/访问。
有很多方法可以访问服务中的JSON有效负载数据,但实际上并没有很多理由要这样做。通常,人们会在控制器级别执行此类操作。您提到“ ...在Grails中将业务逻辑与服务方法隔离的一般原则”,但这不是业务逻辑。在Grails控制器中,处理诸如请求主体之类的Web层详细信息是完全合理的事情。
您可以有一个像这样的控制器...
class SomeController {
SomeService someService
def someAction(Widget w) {
someService.doSomething w
}
}
这样,如果您将JSON发布到someAction
,则将为您完成所有JSON读取,并且Widget
将使用JSON的内容进行初始化。
我希望有帮助。
将json数据作为参数传递给处理此操作的服务方法
控制器动作
def actionName() {
def json = '{"finish_time": "2020-05-12T18:19:00Z", "start_time": "2020-05-14T18:19:00Z"}'
serviceInstance.methodName(json)
}
服务方法
def methodName(json) {
def jsonSlurper = new JsonSlurper()
def data = jsonSlurper.parseText(json) // here data is a Groovy data structures in this case a Map
// ... sql logic
}