无法匹配extjs在Play路线上发布请求

时间:2013-10-15 05:38:12

标签: post extjs4 playframework-2.0

我的帖子请求如下:

Request URL:http://localhost:9000/getjson?_dc=1381814841666
Request Method:POST

它由Extjs生成。我的路线如下:

POST        /getjson{?_dc=<[0-9]+>para}                 controllers.Application.getjson(para:String)

我的控制器是:

object Application extends Controller {

  def index = Action {
    Ok(views.html.index("Your new application is ready."))
  }
  def sidebar = Action {
    Ok(views.html.sidebar("SBide Bar"))
  }
  def showerr(info:String) = Action {
    Ok(views.html.showerr(info))
  }
  // how to cooperate with extjs ?
  def getjson(para:String) = Action(parse.json) { request =>  {
      val jsval: JsValue = request.body
      val w = new PrintWriter(new File("test.txt" ))
      w.write("json: %s".format(jsval.asOpt[String]))
      w.close()

      Ok("get json "+para)
    }
  }
}

但服务器似乎无法找到该帖子的匹配项,它会回复:

Action not found
For request 'POST /getjson?_dc=1381814841666'
These routes have been tried, in this order:
1 GET / controllers.Application.index
2 GET /sidebar controllers.Application.sidebar
3 GET /error/$info<.+> controllers.Application.showerr(info:String)
4 POST /getjson{?_dc=<[0-9]+>para} controllers.Application.getjson(para:String)
5 GET /assets/$file<.+> controllers.Assets.at(path:String = "/public", file:String)

我该如何解决?任何人都可以看到这件事是什么?

- 编辑

我尝试了测试路线:

GET / test$para<%3f_dc=[0-9]+> controllers.Application.test(para:String)

它只适用于这样的网址:/test%3f_dc=123,而不适用于/test?_dc=123。我还尝试将%3f替换为正则表达式部分中的\?,它已成功编译,但仍无法正常工作。

那么我该如何为包含?的网址编写路由?

- EDIT2

我将路线更改为以下内容:

POST /getjson$para<.*> controllers.Application.getjson(para:String)

现在路线工作了,但我得到的para是空的!最重要的是request.bodyNone!但是,从Chrome审核,我可以看到json已经在Request Payload,所以我错过了什么?

1 个答案:

答案 0 :(得分:0)

这只能这样:

路线:

POST /getjson/$_dc<[0-9]+> controllers.Application.getjson(_dc:String)

你应该这样称呼它:

http://localhost:9000/getjson/1381814841666

不幸的是,我没有找到一种方法使其适用于查询参数。希望它适合你