如何将HttpServletRequest JSON入站数据从控制器传递到服务方法

问题描述 投票:0回答:2

我了解在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数据进行工作的服务方法的任何示例/说明。在此先感谢您,对我而言,这似乎是一项非常基本的任务。

grails service controller dataflow
2个回答
1
投票

很遗憾,我不知道服务方法如何访问 入站JSON有效负载数据。这必须很常见,但我不是 了解从控制器到服务方法的数据传递/访问。

有很多方法可以访问服务中的JSON有效负载数据,但实际上并没有很多理由要这样做。通常,人们会在控制器级别执行此类操作。您提到“ ...在Grails中将业务逻辑与服务方法隔离的一般原则”,但这不是业务逻辑。在Grails控制器中,处理诸如请求主体之类的Web层详细信息是完全合理的事情。

您可以有一个像这样的控制器...

class SomeController {

    SomeService someService

    def someAction(Widget w) {
        someService.doSomething w
    }
}

这样,如果您将JSON发布到someAction,则将为您完成所有JSON读取,并且Widget将使用JSON的内容进行初始化。

我希望有帮助。


0
投票

将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
}
© www.soinside.com 2019 - 2024. All rights reserved.