Grails 2.x REST控制器 - 适用于空项目,而不是“真正的”项目

时间:2014-10-23 16:50:03

标签: rest grails grails-2.0 grails-controller

我很确定我的项目中有一些简单的设置错误,但我确实可以使用一些帮助找出答案!

我有最新的GGTS和Grails 2.4.3。我试图在我们两个人正在研究的项目中创建一个REST控制器。因为这对我来说是新的,当它不起作用时,我发现一篇文章说明它是多么简单,并且完全遵循它在一个新的空项目中。一切正常,如广告所说!我使用grails命令创建项目,域类,然后是控制器。

我回到原来的项目并执行了相同的步骤(除了创建已经存在的项目,但是通过grails命令创建了WAS)。当我通过GET点击其余URL时,它返回HTTP 404状态,并发出一条消息,说它无法找到'index.gsp',而不是工作。当然,index.gsp不存在。但是,它应该按要求返回json。我的问题是为什么?

由于我(现在)只是试图让REST调用工作,所以Domain类很简单 - 三个String字段。没有其他关系。 Controller扩展了RestfulController。没有静态脚手架或类似的东西......

每个项目有什么相同的内容?

大部分设置都是原创且不受影响。两个URLMapping文件都是相同的。两个Config.groovy文件都是相同的。

两个项目有什么不同?

主要区别在于已存在三(3)个非REST控制器。这是我看到的最大差异。在“混合”控制器(REST和nonRest)时是否存在问题/需要配置某些内容?或者它们是否应该和平共存?

唯一的另一个区别是现有的项目(不起作用)有AngularJS和Bootstrap。没有添加任何其他内容。

任何想法都赞赏!

血腥细节

用于命中端点的curl命令:

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)
    }


}

1 个答案:

答案 0 :(得分:0)

虽然我从来没有弄清楚究竟是什么导致了我描述的行为,但显然我在某个原始项目中做了一些奇怪的事情!

我通过创建第三个全新的空项目解决了这个问题。我如上所述添加了我的休息服务并验证了它的工作原理 - 当然也是如此。然后,因为到目前为止的工作仍然不是很大,我将每个控制器/域对象/视图/等复制到新项目中。现在一切都有效。解决我所知道的问题的一种狡猾的方式,但是我怀疑无论如何我都把第一个项目置于一个非常不可能的状态,我很高兴能够恢复功能!

另外 - 感谢Burt的其他评论 - 将它们全部合并。