2014-10-23 6 views
0

Я уверен, что у меня есть что-то несложное в моем проекте, но я уверен, что смогу использовать какую-то помощь, узнав, что!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 - &quot;/WEB-INF/grails-app/views/example/index.gsp&quot; not found.</h1> 
<HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> 
<u>&quot;/WEB-INF/grails-app/views/example/index.gsp&quot; 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) 
    } 


} 
+0

Когда все кажется, что оно должно работать, но не делает этого, и особенно, когда вы делаете изменения, которые должны иметь небольшой эффект, но все заканчивается тем, что они ведут себя странно, запустите «grails clean» и «grails compile», а затем повторите попытку. Вы также можете «rm -rf target» удалять установленные плагины и весь скомпилированный код, а затем «grails compile» принудительно заполнять полную версию. Иногда динамический код выходит из синхронизации, и вам нужно полностью восстановить все. –

+0

Кроме того, несвязанные - вы должны опустить 'Long id' и' Long version', так как они добавлены компилятором Grails для вас. Не причинять им вреда, но они беспорядочны. Кроме того, 'nullable: false' является значением по умолчанию для всех свойств, поэтому нет необходимости в этом, и Grails 2.4 заменяет пустые строки нулями во время привязки данных, поэтому вы также можете удалить« blank: false ». И потерять эти точки с запятой :) –

+0

Вы не хотите, чтобы 'id',' version', 'lastUpdated' или' dateCreated' учитывались в 'hashCode' или' equals' вычислении - я предполагаю, что 2 экземпляра с одинаковыми 'name' и' description' будут считаться «равными» (или даже 2 с одним и тем же «именем»), но разница в других 4 реквизитах, скорее всего, и потерпит поражение, чтобы вычислить 'hashCode' /' equals' вообще –

ответ

0

Пока я не понял, что именно вызывает поведение я описал, это было очевидно, что-то странное я сделал в оригинальном проекте где-то!

Я решил проблему, создав третий совершенно новый пустой проект. Я добавил службу отдыха, как описано выше, и подтвердил, что работал - естественно, так и было. Тогда, поскольку работа до сих пор была не очень большой, я скопировал каждый объект/объект контроллера/объект/etc в новый проект. Все теперь работает.Какой-то простой способ решить проблему, которую я знаю, но, как я подозреваю, я каким-то образом поставил первый проект в крайне маловероятное состояние, я просто счастлив вернуться к работе!

Также - спасибо Берт за другие комментарии - включили их все.