在Routes文件中拦截变量类型验证

时间:2012-07-17 13:52:55

标签: java model-view-controller playframework

我几乎在一周前开始研究Play,我现在正在尝试做的是拦截路由文件完成的类型验证。 我正在进行完全服务器编程,没有任何表格涉及我得到的所有数据都是通过uri.Now考虑遵循Rout

    GET /send/request/*to/*from     controllers.Req_controller.sendRequest(to: Int, from:Int)

如果我输入非数字字符或字符串而不是整数,它会给我类型违规错误。 我不希望玩这样做,我想自己处理这些错误,返回一个JSon对象是一个不错的选择。

但我不想要,

  Bad request  For request 'GET /send/request/3/f' [Cannot parse parameter from as Int: For input string: "f"] 

帮助将受到高度赞赏

1 个答案:

答案 0 :(得分:3)

带有星号的routes中的参数用于String跨越几个“斜线段”,应该放在routes文件末尾的位置,即:

GET     /some/*path    controllers.Application.resolvePath(path: String)

将匹配:

http://domain.tld/some/a       it will pass 'a' String as a path param
http://domain.tld/some/a/b     it will pass 'a/b'
http://domain.tld/some/a/b/c   it will pass 'a/b/c'

在您的情况下,您应该使用参数的“冒号版本”:

GET  /send/request/:to/:from  controllers.Req_controller.sendRequest(to: Integer, from:Integer)

修改

要进行基本拦截,您只需使用Global object(底部)覆盖onBadRequest()方法即可。

您还可以将整个*path作为a/b/c字符串发送到您的控制器(就像在此答案中的第一个示例路由中),然后将其拆分并在一些更复杂的场景中逐个验证,无论如何,你可以看到有可能性,我相信你会选择一些东西。