Клиент REST Grails Groovy не может разрешить класс RestClientBuilder

У меня есть пустой проект, созданный с помощью GGTS, мое приложение работает нормально, я могу просматривать представления и перемещаться по ним.

Мне нужно вызвать REST API и использовать предоставленные данные, я прочитал и добавил необходимый подключаемый модуль в файл BuildConfig в разделе зависимостей, а затем в разделе плагинов, похоже, ни один из них не работает.

compile ":rest-client-builder:2.0.0"

Я создал контроллер, я не уверен, где добавить сюда импорт, поэтому я попробовал:

package myapp


class UserController {

    def index() {
        import grails.plugins.rest.client.RestBuilder
        String url = "https://foo.com/batch/$id"
        def resp = new RestBuilder().get(url) { header 'Authorization', 'Basic base64EncodedUsername&Password' }

        render resp
    }

но я получаю сообщение об ошибке: невозможно разрешить класс....

API возвращает данные JSON, до сих пор я просто создавал новый проект Grails, добавлял контроллер, добавлял представление, а затем зависимость.

Я несколько раз очищал построенный проект, но ошибка остается.

Спасибо за вашу помощь.


person fabian278    schedule 08.04.2017    source источник


Ответы (2)


Импорт идет вверх

После строки пакета

И перед линией класса

Кроме того, в зависимости от вашей версии Grails, вы можете захотеть переместить ggts... Не уверен, что он больше поддерживается...

person tim_yates    schedule 08.04.2017
comment
Спасибо, я поместил туда импорт, но теперь не могу разрешить класс grails.plugins.rest.client.RestBuilder, та же проблема, что и раньше. Что посоветуете вместо ggts? Спасибо!! - person fabian278; 08.04.2017

Я думаю, что проблема в вашем определении зависимости build.gradle.

Вставьте следующую строку в ваш файл build.gradle, и я думаю, что это будет полезно:

compile "org.grails.plugins:rest-client-builder:2.1.1"

Дополнительные сведения см. в документации по подключаемому модулю Grails.

Имейте в виду, что вся бизнес-логика должна быть размещена на сервисном уровне, а не в контроллере. Лучше всего, чтобы ваш контроллер был как можно более компактным.

Еще одна наилучшая практика — определить следующую строку:

String url = "https://foo.com/batch/$id"

в начале контроллера как статическая конечная строка

static final String url = "https://foo.com/batch/" 

и добавьте $id, когда это необходимо в коде.

Вот как это должно вызываться внутри метода:

String url = "${url}/{$id}"
person Rotem    schedule 09.04.2017
comment
Ротем, спасибо за ответ, это мое первое приложение Grails, и я понятия не имею, как оно работает. Я добавил строку в файл buildconfig.groovy, я не могу найти файл build.grandle в своем проекте. Кроме того, я не уверен, куда добавить бизнес-логику, это класс предметной области или просто обычный класс? - person fabian278; 09.04.2017
comment
В этом случае вы не знакомы с инструментом построения Gradle, я бы порекомендовал прочитать следующую документацию, чтобы немного рассказать о Gradle. docs.gradle.org/current/userguide/tutorial_java_projects.html. файл build.gardle должен быть установлен в каталоге webapp. Если вы не знакомы с услугами, пока оставьте это, это хорошая практика, но не обязательная. - person Rotem; 09.04.2017