【问题标题】:Intercept Variable Type validation in Routes file在 Routes 文件中拦截变量类型验证
【发布时间】:2012-07-17 13:52:54
【问题描述】:

大约一周前我开始在 Play 上工作,我现在要做的是拦截由路由文件完成的类型验证。 我正在做完全服务器编程,不涉及任何形式我得到的所有数据都是通过uri。现在考虑关注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"] 

我们将非常感谢您的帮助

【问题讨论】:

    标签: java model-view-controller playframework


    【解决方案1】:

    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 字符串发送到您的控制器(就像在此答案中的第一个示例路由中一样),然后在一些更复杂的场景中将其拆分并逐部分验证,无论如何您都可以看到有一些可能性,我相信你会选择一些东西。

    【讨论】:

    • 感谢您的帮助,但我想问的是“如何在路由级别拦截类型验证”,即如何在调用或请求进入路由文件进行验证之前拦截它.
    猜你喜欢
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 2017-07-08
    • 1970-01-01
    相关资源
    最近更新 更多