所以我正在研究Grails / Flex玩具项目。我有一个控制器(LoginController),我用来在我的Flex应用程序上执行后端身份验证。但是,我无法“找到”我的控制器。我的意思是我在尝试访问
时收到HTTP状态404错误http://localhost:8080/OrlandoGrails/LoginController/login.json
这是我悲伤,悲伤的小控制器,因为它处于概念验证状态。
package orlandograils
class LoginController {
static allowedMethods = [login: "POST", login: "GET"]
def login(String username, String password )
{
return "Hello"
}
}
我已经看过有关RESTful服务的文档,但它们似乎总是涉及我没有的域对象。无论如何,我还将此添加到我的UrlMappings.groovy文件
"/LoginController/login.json"(resource:"LoginController")
对于我正在做的可怕错误的任何帮助将不胜感激。另外,有没有办法列出像RoR或Symfony2一样的Grails路线?
此外,虽然我的大部分服务都是通过amf频道进行的,但我的身份验证是通过http进行的。
答案 0 :(得分:2)
关于获取路线列表(例如网址映射),您可以运行grails url-mappings-report
另请注意将url-mapping修改为:
"/LoginController/login.json"(controller: "login", action: "login")
如果使用resource
,则必须显示,创建,更新和删除默认操作方法
//Using resource: would look for a show() action method for a GET
//request which you don't have in your case. And, note name of controller used
//is login instead of LoginController
"/LoginController/login.json"(resource: "login")
就404而言,它正在寻找一个名为" hello.gsp"的相应视图。如果要渲染文本,请使用:
render text: 'hello'
答案 1 :(得分:2)
您要完成的目标并不完全清楚,但您的示例的一个问题是,在您的URL映射中,您指定控制器的名称作为您的资源,这没有意义。这可能是域类,但不是控制器。
如果你想做的只是将网址映射到控制器中的特定操作,你可以在UrlMappings.groovy中执行类似的操作......
"/LoginController/login.json"(controller: 'login', action: 'login')
通常你不会在网址中有“控制器”,所以这样的事情会更常见......
"/login/login.json"(controller: 'login', action: 'login')
从小代码片段中还不清楚您希望JSON扮演什么角色。也许你只是想要这样的东西......
"/login"(controller: 'login', action: 'login')
如果你能进一步描述你想要完成的事情,我可以澄清一下。
答案 2 :(得分:1)
原帖包括:
package orlandograils
class LoginController {
static allowedMethods = [login: "POST", login: "GET"]
def login(String username, String password )
{
return "Hello"
}
}
allowedMethods属性存在伪造。地图中的键必须是唯一的。该代码尝试将密钥登录在Map中两次。如果意图是可以通过POST或GET访问登录方法,那么这是有道理的......
static allowedMethods = [login: ['POST', 'GET']]
编写的代码是有效的,但它不会执行它可能要执行的操作。该Map将评估为只有1个与登录密钥相关联的值。这与Grails没有任何关系,这只是标准的Map行为。
$ groovysh
Groovy Shell (2.1.9, JVM: 1.7.0_45)
Type 'help' or '\h' for help.
-------------------------------------------------------------------------------
groovy:000> [login: 'GET', login: 'POST']
===> {login=POST}
groovy:000>
请注意,表达式求值为一个Map,其值为“POST”,与登录密钥相关联。