服务中的Grails binddata

dvi*_*sco 5 grails

bindData除了使用已弃用的服务之外,有没有办法在服务中使用BindDynamicMethod?我不能只使用

TestObject testObject = new TestObject()
TestObject testObject.properties = params
Run Code Online (Sandbox Code Playgroud)

要么

TestObject testObject = new TestObject(params)
Run Code Online (Sandbox Code Playgroud)

因为我有一个自定义绑定方法,利用@BindUsingTestObject班级中的注释.

dma*_*tro 14

如果您使用的是Grails 3.*那么服务类可以实现DataBinder特征和实现bindData(),如下所示:

import grails.web.databinding.DataBinder

class SampleService implements DataBinder {

    def serviceMethod(params) {
        Test test = new Test()
        bindData(test, params)

        test
    }

    class Test {
        String name
        Integer age
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我在grails控制台中快速尝试的方法:

grailsApplication.mainContext.getBean('sampleService').serviceMethod(name: 'abc', age: 10)
Run Code Online (Sandbox Code Playgroud)


Jef*_*own 5

在 Grails 2.4.4 中你可以这样做:

// grails-app/services/demo/HelperService.groovy
package demo

import org.grails.databinding.SimpleMapDataBindingSource

class HelperService {

    def grailsWebDataBinder

    TestObject getNewTestObject(Map args) {
        def obj = new TestObject()
        grailsWebDataBinder.bind obj, args as SimpleMapDataBindingSource
        obj
    }
}
Run Code Online (Sandbox Code Playgroud)