Java 在路由文件中拦截变量类型验证

Java 在路由文件中拦截变量类型验证,java,model-view-controller,playframework,Java,Model View Controller,Playframework,我差不多一周前就开始了Play的工作,现在我要做的是拦截routes文件进行的类型验证。 我正在做完全的服务器编程,没有涉及任何表单。我得到的所有数据都是通过URI。现在考虑Routh[/P> GET /send/request/*to/*from controllers.Req_controller.sendRequest(to: Int, from:Int) 如果输入非数字字符或字符串而不是整数,则会出现类型冲突错误。 我不想让play这样做,我想自己处理这些错误,返回JS

我差不多一周前就开始了Play的工作,现在我要做的是拦截routes文件进行的类型验证。 我正在做完全的服务器编程,没有涉及任何表单。我得到的所有数据都是通过URI。现在考虑Routh[/P>
    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"] 

非常感谢您的帮助。

带有星号的
路由中的参数用于跨越多个“斜杠段”的
字符串,应放在
路由
文件末尾的某个位置,即:

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)
编辑

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


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

谢谢您的帮助,但我想问的是“如何在路由级别截获类型验证”,即如何在调用或请求进入路由文件进行验证之前截获它。