必须正确编写conf/routes文件才能使http请求精准路由到控制器方法;基础写法如get /login app.login,参数匹配支持冒号提取、正则限定和类型绑定,静态资源需通配符映射,websocket路由以ws开头,查询参数须在控制器中用c.params.get获取。

要在Revel框架中让HTTP请求精准落到对应控制器方法,必须正确编写conf/routes文件,否则404或参数丢失会直接中断开发流程。
基础路由写法
打开项目根目录下的 conf/routes 文件,确保第一行是注释说明,如 # This file defines all application routes。
在空行后写下最简路由: GET /login App.Login —— 这表示所有对 /login 的 GET 请求,将交由 App 控制器的 Login 方法处理。
注意:路径开头不能加空格,控制器名和方法名之间用英文点号连接,大小写必须与代码中完全一致;【大小写错误会导致路由完全不生效,且无编译报错】。
带参数的URL匹配
方法一:使用冒号语法提取路径段
写入 GET /hotels/:id Hotels.Show,即可匹配 /hotels/123、/hotels/abc 等地址,其中 :id 会被自动捕获为字符串并存入 c.Params。
方法二:用花括号+正则限定类型
写入 POST /hotels/{id} Hotels.Save,此时只有数字ID才匹配成功,/hotels/abc 将被跳过——这能避免无效请求进入控制器逻辑。
方法三:绑定到Action函数参数(推荐)
在控制器中定义 func (c Hotels) Show(id int) revel.Result,Revel会自动尝试将 :id 转为整型;若转换失败,整个请求直接返回404,无需手动校验类型。
通配符与静态资源映射
第一步:声明通配符路由
添加 GET /public/*filepath Static.Serve("public"),* 必须放在路径末尾,且前面要有斜杠;它会把 /public/css/app.css、/public/images/logo.png 全部映射到项目内 app/public/ 目录下对应文件。
第二步:验证静态路径存在
确保项目中确实存在 app/public/ 文件夹,且里面包含你要服务的资源;如果路径不存在,Revel不会报错,但浏览器将收到404响应。
第三步: favicon 单独映射(可选)
追加一行 GET /favicon.ico Static.Serve("public", "img/favicon.png"),注意引号间不能有空格——【此处空格会导致启动失败且报错信息极不明确】。
WebSocket与自动路由
WebSocket路由必须以 WS 开头,例如 WS /chat/:room Chat.Join;对应控制器方法签名必须是 func (c Chat) Join(ws *websocket.Conn, room string) revel.Result,第一个参数固定为 *websocket.Conn 类型。
捕获全部的兜底路由写法是 * /:controller/:action :controller.:action,它会让 /user/list 自动调用 User.List 方法;但该路由必须放在 routes 文件末尾,否则会覆盖掉上面更具体的路由规则。
查询参数处理规范
不要在 routes 文件里写 GET /company?name=:name APP.ShowByName —— 这种写法完全无效,Revel 会忽略 ? 后所有内容,导致路由无法匹配。
正确做法是只写 GET /company APP.ShowByName,然后在控制器中用 c.Params.Get("name") 获取 URL 查询参数;Revel 已将 query、form、path 参数全部合并进 Params,无需区分来源。
如果需要强制校验必填查询参数,应在控制器内判断返回值是否为空,而不是依赖路由层过滤。











