Grails/Angular $http() не привязывает объекты команд

В настоящее время мы работаем над обновлением нашего проекта с Grails 2.2 до Grails 3.0 и столкнулись с многочисленными проблемами. Тот, над которым я сейчас работаю, связан с Angular $http() и объектами Command, а не с привязкой данных.

В настоящее время мы позволяем Grails связывать все наши объекты Command в наших методах Controller. Это делается ВЕЗДЕ, и было бы много работы, чтобы связать все вручную (единственное решение, которое я могу найти прямо сейчас). Мы знаем, что в конечном итоге мы должны сделать это (больше контроля. Граальс постоянно неправильно связывается), но лучше не делать этого, если не принуждают.

class MyController {
    def updateStatus(StatusCommand cmd) {
        println("params: ${params}")
        println("cmd: ${cmd}")

        // example with objectId = 1 being passed in as http() data
        // params will be: objectId: 1
        // cmd will be: cmd.objectId: null
    }
}

Наше предыдущее решение включало перехватчик, который брал бы поля request.JSON и выводил их в параметры, если в параметрах уже не было значения.

def beforeInterceptor = {
    if (request.JSON) {
        request.JSON?.each { key, value ->
            if (!params[key]) {
                params[key] = value 
            }
        }
    }
}

В Grails 3.0 перехватчики теперь определяются отдельно от контроллера, поэтому я создал следующее, чтобы повторить то, что у нас было раньше.

class MyInterceptor {
    MyInterceptor {
        matchAll()
    }

    boolean before() {
        if (request.JSON) {
            request.JSON?.each { key, value ->
                if (!params[key]) {
                    params[key] = value 
                }
            }
        }
    }
}

К сожалению, в Grails 3.0 это работает не так, как раньше. В то время как значения, похоже, правильно отображаются в "params", в объекте Command все установлено в нуль. Я могу только предположить, что объект Command сейчас "создается" до запуска перехватчика. Объекты Command правильно связаны с нашими вызовами $.ajax(), так как значения задаются в params, а не в request.JSON.

Есть ли способ каким-то образом получить созданный объект Command Object в перехватчике, чтобы установить его вручную, или у кого-нибудь есть другие идеи для решения?

РЕДАКТИРОВАТЬ: Пример $ http () угловой вызов

var data = { objectId: 1 };
$http({
    method: 'POST',
    url: myUrl,
    data: data
}).success(function() {
    //stuff
});

0 ответов

Другие вопросы по тегам