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

Jersey 3.0中NameBinding绑定的响应过滤器未生效问题求助

问题排查与解决方法

你遇到的过滤器不执行的问题,按以下优先级排查即可:

  1. 缺少@Provider注解
    你的CORSFilter类没有添加JAX-RS组件扫描 required 的@Provider注解,Jersey运行时不会自动识别该过滤器,自然不会执行其中的逻辑。修改代码如下:
import jakarta.ws.rs.ext.Provider;

@Provider
@CORSFilterNameBinding
public class CORSFilter implements ContainerResponseFilter {
    // 原有代码保持不变
}
  1. 检查Jersey组件扫描配置
    如果加了@Provider后过滤器依然不执行,确认你的Jersey配置中已经包含了net.codejava.ws包的扫描规则:
  • 若使用web.xml配置,检查Servlet初始化参数:
<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>net.codejava.ws</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
  • 若使用ResourceConfig子类配置,确认包含包扫描或手动注册过滤器:
public class MyAppConfig extends ResourceConfig {
    public MyAppConfig() {
        // 方式1:扫描对应包下的所有组件
        packages("net.codejava.ws");
        // 方式2:也可以手动单独注册过滤器
        // register(CORSFilter.class);
    }
}
  1. 补充优化(可选)
    如果你的服务需要支持所有跨域请求,无需使用NameBinding做细粒度控制,可以直接去掉CORSFilter上的@CORSFilterNameBinding注解,也不需要在资源方法上加对应的绑定注解,过滤器会全局生效,所有响应都会自动添加CORS头,同时也能自动处理OPTIONS预检请求的CORS头返回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:21:01