java - 拦截路由文件中的变量类型验证

标签 java model-view-controller playframework

我大约一周前开始研究 Play,我现在想做的是拦截路由文件完成的类型验证。 我正在进行完全服务器编程,不涉及任何表单,我获取的所有数据都是通过 uri。现在考虑遵循 Rout

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

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

但我不想

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

我们将非常感谢您的帮助

最佳答案

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

关于java - 拦截路由文件中的变量类型验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11523981/

相关文章:

java - 无法创建类 org.jboss.arquillian.test.impl.EventTestRunnerAdaptor 的新实例

java - 如何将 BufferedImage 绘制到 JFrame 上

Java + Eclipse : False possible null pointer dereference?

java - Spring java 配置扩展抽象配置

cocoa - CoreData、SourceList 和 NSTreeController

c++ - 如何更新 QStringListModel?

java - 伪造 Ajax 请求表单以进行测试

jquery - JavaScript MVC 框架

playframework - 在编译和集群服务器上退出securesocial

java - 如何在模板中创建新的 Form 对象?