You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails JSON端点路由命名规则:URL带.json后缀报错问题咨询

问题解答

Rails路由是否允许URL中直接写.json后缀?

  • 答案是允许的,你遇到的报错不是后缀本身不合法,是路由配置没有正确处理格式声明导致的。
  • 报错的根本原因:你把.json直接写死在路由的路径字符串里时,Rails默认不会把这个后缀识别为请求的format参数,只会把它当成普通路径片段处理。此时Rails无法匹配到对应的响应格式,会默认尝试查找对应名字的模板文件,找不到就抛出ActionController::UnknownFormat错误。
  • 你不带后缀的路由可以正常工作,是因为此时Rails可以通过控制器的render json: xxx语句、或者请求头的Accept参数正确识别响应格式,不需要查找模板。

保留.json后缀的正确配置方法

有两种常用配置方式可以满足需求:

方式1:显式声明format参数并约束为json

这种写法会自动匹配所有带.json后缀的请求,同时Rails能正确识别format参数:

get '/controller/controller_method.:format', to: 'controller#controller_method', constraints: { format: :json }

配置后仅/controller/controller_method.json可以命中该路由,完全符合你要保留后缀的需求。

方式2:写死后缀的同时手动指定默认format

如果你一定要把.json完整写死在路由路径字符串里,只需要额外加defaults参数手动指定响应格式即可:

get '/controller/controller_method.json', to: 'controller#controller_method', defaults: { format: :json }

这样Rails就会直接认定该路由的响应格式为json,不会再去查找模板文件,报错就会消失。

内容的提问来源于stack exchange,提问作者Peabrain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:15:10