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

Dropwizard与Jetty版本兼容问题:ClassCastException异常排查求助

解决java.lang.ClassCastException: BiDiGzipHandler$WrappedServletRequest无法转为org.eclipse.jetty.server.Request

问题背景

使用Dropwizard 1.1.2 和 jetty-server 9.4.2.v20170220,客户端未设置编码请求头时出现类型转换异常,完整堆栈如下:

at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
! at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
! at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
! at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1317)
! at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
! at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
! at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
! at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1219)
! at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
! at com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:241)
! at io.dropwizard.jetty.RoutingHandler.handle(RoutingHandler.java:52)
! at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:674)
! at io.dropwizard.jetty.BiDiGzipHandler.handle(BiDiGzipHandler.java:64)

问题原因

  1. 代码中直接将HttpServletRequest强制转换为Jetty原生的org.eclipse.jetty.server.Request,但请求经过Dropwizard的BiDiGzipHandler时会被包装成BiDiGzipHandler$WrappedServletRequest,该包装类并未继承Jetty的Request类,导致强转失败。
  2. Dropwizard 1.1.2默认依赖Jetty 9.3.x系列,手动指定的9.4.2版本与Dropwizard的Handler链逻辑存在兼容性差异,进一步触发了该异常。

解决方案

  • 避免直接强转Jetty原生Request
    改用Jetty提供的工具类从请求包装链中提取原生实例,替代强制转换:

    import org.eclipse.jetty.server.Request;
    
    // 正确获取Jetty原生Request的方式
    Request jettyRequest = Request.getRequest(httpServletRequest);
    
  • 对齐版本依赖
    Dropwizard 1.1.2官方适配Jetty 9.3.x,不要随意升级Jetty版本。若必须使用Jetty 9.4,建议将Dropwizard升级到1.3.x及以上版本(官方从1.3开始支持Jetty 9.4)。

  • 检查GzipHandler配置
    确保应用中没有重复配置Gzip相关Handler,避免多层请求包装加剧类型转换问题。

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

相关产品推荐
方舟 Agent Plan

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

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