grails 3.3.9 - расширение из restfulController завершается с ошибкой «Конструктор по умолчанию не найден» - PullRequest
0 голосов
/ 17 января 2019

с использованием Grails v3.3.9.

получил ошибку при доступе к контроллеру restful.Веб-сайт grails показывает это

URI
/api/device
Class
java.lang.NoSuchMethodException
Message
Error creating bean with name 'com.softwood.controller.DeviceController': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.softwood.controller.DeviceController]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.softwood.controller.DeviceController.<init>()
Caused by
com.softwood.controller.DeviceController.<init>()

У меня настроен UrlMapping следующим образом

    get "/api/device"(controller:"device", action:"index")

мой контроллер расширяет RestfulController следующим образом, что не позволит добавить конструктор по умолчанию к классу

class DeviceController extends RestfulController<Device> {
    static responseFormats = ['json', 'xml']

    //static scaffold = Device

    DeviceController(Class<Device> device) {
        this(device, false)
    }

    DeviceController(Class<Device> device, boolean readOnly) {
        super(device, readOnly)
    }

    def index (Integer max) {
        params.max = Math.min(max ?: 10, 100)
        Collection<Device> results = Device.list(sort:"name")
        respond results, deviceCount: Device.count()

    }

    def show (Device device) {
        if(device == null) {
            render status:404
        } else {respond device}
    }
}

Здесь есть ссылка, связанная Расширение RestfulController для базы SubClassRestfulController не работает на grails 3.0.4

Однако я очистил сборку, перезапустить и т. Д. Ничего не работает,Я получаю ту же ошибку при создании экземпляра

Что это за исправление, разрешающее расширение из RestfulController?

1 Ответ

0 голосов
/ 17 января 2019

мой контроллер расширяет RestfulController, как это, что не позволяет конструктор по умолчанию для добавления в класс

Это не правда. Ваш конструктор не должен принимать Class в качестве аргумента. Вы хотите конструктор без аргументов.

class DeviceController extends RestfulController<Device> {
    static responseFormats = ['json', 'xml']

    DeviceController() {
        super(Device)

        /* If you want it to be read only, use super(Device, true) 
           instead of super(Device)
         */
    }

    // ...
}

Когда Spring создает экземпляр контроллера, он не собирается ничего передавать конструктору, поэтому вам нужен конструктор no-arg.

...