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

Quarkus Reactive环境下,如何在Resteasy过滤器中识别JAX-RS方法注解

解决Quarkus 3.6.1中Reactive RESTEasy过滤器获取端点HTTP方法注解的问题

方法1:使用io.quarkus.resteasy.reactive.server.spi.ResteasyReactiveResourceInfo替代ResourceInfo

在Reactive版本中,原JAX-RS的ResourceInfo无法正常获取方法注解,你可以注入Quarkus提供的Reactive专属ResteasyReactiveResourceInfo来获取资源方法的完整信息:

import io.quarkus.resteasy.reactive.server.spi.ResteasyReactiveResourceInfo;
import jakarta.ws.rs.container.ContainerResponseFilter;
import jakarta.ws.rs.container.ContainerRequestContext;
import jakarta.ws.rs.container.ContainerResponseContext;
import jakarta.ws.rs.ext.Provider;
import jakarta.ws.rs.POST;

@Provider
public class MyResponseFilter implements ContainerResponseFilter {

    private final ResteasyReactiveResourceInfo resourceInfo;

    // 构造注入(Quarkus推荐使用构造注入)
    public MyResponseFilter(ResteasyReactiveResourceInfo resourceInfo) {
        this.resourceInfo = resourceInfo;
    }

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
        // 获取当前资源方法
        var resourceMethod = resourceInfo.getResourceMethod();
        // 检查是否带有POST注解
        boolean isPostMethod = resourceMethod.isAnnotationPresent(POST.class);
        // GET、PUT等其他HTTP方法注解的判断逻辑同理
        if (isPostMethod) {
            // 执行你的业务逻辑
        }
    }
}

方法2:从ContainerRequestContext直接获取请求方法

如果仅需要判断当前请求的HTTP方法类型,无需直接操作方法注解,可以直接从请求上下文获取:

@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
    String httpMethod = requestContext.getMethod();
    if ("POST".equalsIgnoreCase(httpMethod)) {
        // 执行你的业务逻辑
    }
}

这种方式更轻量,适合仅需判断请求方法类型的场景。

注意事项

  • 确保过滤器类标注@Provider注解,且被Quarkus扫描到(比如放在@ApplicationPath类的同包/子包下,或通过@RegisterProvider手动注册)。
  • ResteasyReactiveResourceInfo是Quarkus Reactive RESTEasy的专属API,与原JAX-RS的ResourceInfo不兼容,迁移后需替换使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:43:15