0

我在集成测试 restful 控制器时遇到了一个奇怪的问题......在下面的代码片段中,当我从测试中发出 post 请求时,RestfulController调用父类的 save 方法而不是子类的 save 方法,MyController因为他们有不同的签名,这最终会导致UNPROCESSIBLE_ENTITY响应。

class MyController extends RestfulController<MyDomain> {
    static responseFormats = ['json', 'xml', 'hal']

    MyController() {
        super(MyDomain)
    }


    def save(MyCommand command) {
        ...
    }
}

当我运行以下测试时,save()我的控制器父类的操作RestfulController被执行,从而导致UNPROCESSIBLE_ENTITY响应,因为我使用的 Command 对象与我的域类不同。

void "Test the save action correctly persists an instance"() {
        when: "The save action is executed with valid data"

        response = restBuilder.post(resourcePath) {
            accept('application/json')
            header('Authorization', "Bearer ${accessToken}")
            json validJson
        }

        then: "The response is correct"

        response.status == CREATED.value()
        response.json.id
        Vote.count() == 1
    }

请问我能做些什么来解决这个问题?

4

1 回答 1

0

不支持重载控制器操作。您可以覆盖它们,但不能重载它们。

发生的事情是框架正在调用save()父类中的无参数操作,它从不调用您的方法(也不应该)。

您可以重命名您save(MyCommand command)的名称,使其与父类中的操作名称不同,然后提供相应的 URL 映射,然后您就可以使用了。取决于你想在行动中做什么,这可能是也可能不是最好的事情,但这是你可以采取的 1 条路径。

我希望这是有道理的。

于 2018-04-22T17:27:13.577 回答