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

Grails 6.2.3中含.gsp后缀的URL无法映射至控制器的问题求助

Grails 6.2.3 带.gsp后缀URL 404问题解决方法

在Grails 6.2.3中,访问类似http://localhost:8080/report/view.gsp?a=b的URL时会返回404错误,无法映射到对应控制器动作,但其他后缀(如.gspx、.abc、.xyz)的URL无需修改配置即可正常路由。默认的UrlMappings.groovy配置看似包含格式参数匹配,但对.gsp后缀无效。

问题原因

Grails 6.x版本默认会将.gsp后缀的请求直接交给视图解析器尝试查找对应的GSP视图文件,而不是通过UrlMappings路由到控制器动作,这是框架默认行为的调整,和旧版本(如3.3)的处理逻辑不同。

解决方案

方案1:添加优先匹配的UrlMapping规则

修改grails-app/controllers/UrlMappings.groovy,在默认映射前添加专门匹配.gsp后缀的规则:

// 优先处理带.gsp后缀的请求
"/$controller/$action.gsp/$id?" {
    constraints {
        // 根据需求添加约束,比如限制控制器或动作
    }
}

// 保留原有默认映射
"/$controller/$action?/$id?(.$format)?"{
    constraints {
        // apply constraints here
    }
}

这条规则会优先捕获带.gsp后缀的请求,将gsp识别为格式参数,从而路由到对应的控制器动作。

方案2:禁用GSP后缀的自动视图解析

在application.yml(或application.groovy)中添加配置,让框架不再直接处理.gsp后缀的请求:

  • 若使用application.yml:
grails:
    views:
        gsp:
            suffix: false
  • 若使用application.groovy:
grails.views.gsp.suffix = false

该配置会关闭框架对.gsp后缀的自动视图解析逻辑,让所有带.gsp后缀的请求都通过UrlMappings进行路由。

验证

修改配置后重启应用,再次访问http://localhost:8080/report/view.gsp?a=b,即可正常映射到report控制器的view动作,并且能正确获取请求参数a=b。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:18:20