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

Grails 4.0.11版本下GSP页面原始HTML过度编码问题咨询

问题原因

这个是Grails 4.0.4及后续4.x版本的已知配置加载优先级问题,不少跨版本升级的用户都遇到过相同现象,不属于配置填写错误,确实是未完全明记在官方版本说明里的隐性变更:

  • 4.0.4版本调整了fat jar运行时的配置加载顺序,grails-web-gsp依赖包内置的默认编码配置优先级,会高于项目中application.groovy/application.yml里的自定义GSP编码配置
  • 开发模式run-app运行时,加载顺序优先读取项目本地配置,所以你写的codec="none"规则可以正常生效,没有过度编码问题
修复方案

方案1:启动时追加参数(无需修改代码)

运行jar包时追加GSP编码的系统参数即可:

java -Dgrails.views.gsp.codecs.expression=none -Dgrails.views.gsp.codecs.scriptlets=none -Dgrails.views.gsp.codecs.taglib=none -jar 你的应用包名.jar

方案2:代码层面固定配置(一劳永逸)

在项目grails-app/conf/spring/resources.groovy中手动覆盖视图解析器的编码配置,优先级高于依赖包默认配置:

import org.grails.web.servlet.view.GroovyPageViewResolver

beans = {
    groovyPageViewResolver(GroovyPageViewResolver) {
        expressionCodec = 'none'
        scriptletCodec = 'none'
        taglibCodec = 'none'
        staticPartsCodec = 'none'
    }
}

重新打包后运行就会正常解析原始HTML内容,不需要修改现有GSP页面代码。

临时兼容方案

如果暂时不想改配置,可以在GSP中输出HTML的表达式外层套raw()函数,强制跳过编码:

${raw(你的HTML内容变量)}

这个方案只适合临时测试,不建议全项目大范围使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:36:01