Я уверен, что у меня есть что-то несложное в моем проекте, но я уверен, что смогу использовать какую-то помощь, узнав, что!Grails 2.x REST Controller - работает в пустом проекте, а не в «реальном» проекте
У меня есть последние GGTS и Grails 2.4.3. Я попытался сделать REST Controller в проекте, над которым работают двое из нас. Поскольку это было ново для меня, когда это не сработало, я нашел статью, которая показала, насколько она проста, и следовала за ней именно в новом, пустом проекте. Все работало правильно и рекламировалось! Я использовал команды grails для создания проекта, класса домена, а затем контроллера.
Я вернулся к своему первоначальному проекту и сделал те же шаги (за исключением создания проекта, который уже существовал, но был создан с помощью команды grails). Вместо того, чтобы работать, когда я удаляю остальные URL через GET, он возвращает статус HTTP 404 и сообщение о том, что он не может найти «index.gsp». Конечно, index.gsp не существует. Однако он должен вернуть json по запросу. Почему мой вопрос?
Поскольку я (сейчас) просто пытаюсь работать с вызовами REST, класс Domain тривиален - три строковых поля. Других отношений нет. Контроллер расширяет RestfulController. Нет статических эшафотов или чего-либо подобного ....
Что же в каждом проекте?
Большая часть установки оригинальная и нетронутая. Оба файла URLMapping идентичны. Оба файла Config.groovy идентичны.
В чем отличие между двумя проектами?
Главное отличие состоит в том, что три (3) контроллера без REST уже существуют. Это очень большая разница, которую я вижу. Есть ли необходимость/необходимость что-то настраивать при «смешивании» контроллеров (REST и nonRest) или они должны мирно сосуществовать?
Единственное отличие состоит в том, что существующий проект (который не работает) имеет AngularJS и Bootstrap. Больше ничего не добавлено.
Любые идеи оценены!
окровавленные детали
Завиток команда используется, чтобы поразить конечную точку:
curl -H "Accept: application/json" http://localhost:8080/myproject/example
ответ:
<html><head><title>Apache Tomcat/7.0.55 - Error report</title><style><!--H1
[deleted font family lines...]
{color : black;}A.name {color : black;}HR {color : #525D76;}--></style>
</head><body><h1>HTTP Status 404 - "/WEB-INF/grails-app/views/example/index.gsp" not found.</h1>
<HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b>
<u>"/WEB-INF/grails-app/views/example/index.gsp" not found.</u></p><p>
<b>description</b> <u>The requested resource is not available.</u></p>
<HR size="1" noshade="noshade"><h3>ApacheTomcat/7.0.55</h3></body></html>
Домен Класс:
package com.mycompany.rest
import groovy.transform.EqualsAndHashCode;
import groovy.transform.ToString;
@ToString(includeNames = true, includeFields = true, excludes = 'dateCreated, lastUpdated')
@EqualsAndHashCode
class Example {
Long id
Long version
Date dateCreated
Date lastUpdated
String name
String description
static constraints = {
name blank:false, nullable:false
description blank:false, nullable: false
}
}
Контроллер:
package com.mycompany.rest
import grails.rest.RestfulController;
class ExampleController extends RestfulController<Example> {
static responseFormats = ['json', 'xml']
ExampleController() {
super(Example)
}
}
Когда все кажется, что оно должно работать, но не делает этого, и особенно, когда вы делаете изменения, которые должны иметь небольшой эффект, но все заканчивается тем, что они ведут себя странно, запустите «grails clean» и «grails compile», а затем повторите попытку. Вы также можете «rm -rf target» удалять установленные плагины и весь скомпилированный код, а затем «grails compile» принудительно заполнять полную версию. Иногда динамический код выходит из синхронизации, и вам нужно полностью восстановить все. –
Кроме того, несвязанные - вы должны опустить 'Long id' и' Long version', так как они добавлены компилятором Grails для вас. Не причинять им вреда, но они беспорядочны. Кроме того, 'nullable: false' является значением по умолчанию для всех свойств, поэтому нет необходимости в этом, и Grails 2.4 заменяет пустые строки нулями во время привязки данных, поэтому вы также можете удалить« blank: false ». И потерять эти точки с запятой :) –
Вы не хотите, чтобы 'id',' version', 'lastUpdated' или' dateCreated' учитывались в 'hashCode' или' equals' вычислении - я предполагаю, что 2 экземпляра с одинаковыми 'name' и' description' будут считаться «равными» (или даже 2 с одним и тем же «именем»), но разница в других 4 реквизитах, скорее всего, и потерпит поражение, чтобы вычислить 'hashCode' /' equals' вообще –