Как установить предпочтительное разрешение при смешивании видов GSP и JSON - PullRequest
0 голосов
/ 21 мая 2019

Я поддерживаю приложение grails 3.3.8, используя профиль angularjs.

Ресурсы REST API и angularjs предоставляются одним и тем же приложением grails.Пока я не хочу разделять приложение на два приложения.

Приложение использует представления JSON для визуализации ответа JSON для ресурсов.Приложение также использует плагин вида GSP для предоставления начального index.gsp для обслуживания приложения angularjs.

Из-за использования плагина вида GSP приложение всегда отображает представления ошибок gsp по умолчанию вместо использования JSONпредставления в случае ошибок 500, 404, 401, ....

Когда я удаляю плагин grails-gsp, все запросы обрабатываются с ответом JSON.Также в случае ошибки.Но тогда index.gsp не может быть отрендерено.

Можно ли сказать приложению grails, что оно должно использовать представления JSON по умолчанию, и в случае индекса оно должно использовать представление gsp?

Обновление: я хотел бы отображать представления непосредственно из URLMapping без создания контроллера.

1 Ответ

1 голос
/ 26 мая 2019

Можно ли сказать приложению grails, что оно должно использовать представления JSON по умолчанию, и в случае индекса оно должно использовать представление gsp?

Да.Вы можете обслуживать много разных типов представлений из одного и того же приложения, в том числе GSON Views, работая параллельно с GSP Views.

См. Проект по адресу https://github.com/jeffbrown/webjsonviews.

Если вы запустите это приложение и отправите запрос на http://localhost:8080/person/index с помощью своего браузера, вы увидите HTML-файл, который был отображен на стороне сервера с использованиемGSP.

Если вы отправите запрос на http://localhost:8080/person/index.json с помощью своего браузера, вы увидите JSON, обработанный с использованием GSON Views.

Это отобразит HTML:

curl http://localhost:8080/person/index

Будет отображаться JSON:

curl http://localhost:8080/person/index.json

Будет отображаться JSON:

curl -H "Accept: application/json" http://localhost:8080/person/index

Если вы хотите, чтобы тип содержимого по умолчанию был application/json, вы можете добавитьпосле PersonController:

static responseFormats = ['json', 'html']

Это приведет к тому, что следующее вернет JSON вместо HTML:

curl http://localhost:8080/person/index

Надеюсь, это поможет.

...