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

Spring Boot 2.4.5 REST服务WAR包部署Glassfish 5访问端点报错

问题根因

这个错误是Glassfish 5内置Jackson包和Spring Boot 2.4.5依赖的Jackson包版本冲突导致的:

  • Spring Boot 2.4.5默认依赖Jackson 2.12.x版本,ReferenceTypeSerializer类新增了带5个参数的withResolved方法,用于Optional等引用类型的序列化
  • Glassfish 5内置了低版本的Jackson包,默认类加载策略优先加载服务器自带的Jar,低版本的ReferenceTypeSerializer没有对应方法,调用时就会抛出AbstractMethodError
  • Tomcat 9默认优先加载Web应用WEB-INF/lib下的依赖,所以使用Spring Boot自带的高版本Jackson运行正常
解决方案

方案1(推荐,从类加载层面彻底解决冲突)

在Web应用的src/main/webapp/WEB-INF目录下新建glassfish-web.xml配置文件,指定类加载优先使用应用自带的依赖:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app>
    <class-loader delegate="false"/>
</glassfish-web-app>

重新打包部署即可。

方案2(临时规避,无需修改服务器配置)

修改Controller层代码,把返回值类型从Optional<Candidato>直接改为Candidato,绕开Jackson对Optional类型的序列化逻辑:

@RequestMapping("/candidatos/{chave}")
public Candidato getCandidatoID(@PathVariable("chave") Integer chave) {
    return servicoRecrutamento.getCandidatoID(chave).get();
}

对应Service层代码不用修改,因为查询不到数据的时候已经抛出了异常,不会走到返回空Optional的逻辑。

内容的提问来源于stack exchange,提问作者Henrique C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:15:04