调用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
相关产品推荐
相关产品推荐

