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

调用grails.util.Metadata.getServletVersion抛出NullPointerException问题

解决调用Holders.grailsApplication.metadata.getServletVersion()抛出NullPointerException的问题

调用Holders.grailsApplication.metadata.getServletVersion()时,无论代码放置在何处都会抛出如下空指针异常:

java.lang.NullPointerException: null
        at java.util.Objects.requireNonNull(Objects.java:203)
        at java.util.Optional.<init>(Optional.java:96)
        at java.util.Optional.of(Optional.java:108)
        at grails.util.Metadata.getServletVersion(Metadata.groovy:284)
        at grails.util.Metadata$getServletVersion$1.call(Unknown Source)

问题原因

从堆栈信息能看出,异常是在Metadata.getServletVersion()方法调用Optional.of()时触发的——该方法要求传入参数不能为null,但当前Metadata实例中用于获取servlet版本的属性未被正确初始化,导致传入了null值。

解决方案

  • 等待应用完全初始化后调用:Holders.grailsApplication的元数据可能在应用启动早期还未完成加载,此时调用会导致内部属性缺失,要确保在应用启动完成后的代码逻辑中调用该方法。
  • 直接使用Metadata.current获取实例:替代通过Holders.grailsApplication.metadata获取元数据,改用更可靠的全局实例:
    Metadata.current.getServletVersion()
    
  • 手动配置servlet版本:检查项目的application.yml或application.properties文件,若未配置servlet.version属性,手动添加对应版本值(例如4.0):
    # application.yml示例
    grails:
      metadata:
        servlet.version: 4.0
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:30:20