2.18. 用于修改资源元数据的 RESTEasy SPI


JBoss EAP 提供 RESTEasy 服务提供商接口(SPI),用于修改使用 ResourceBuilder 创建的资源类元数据。在处理 JAX-RS 部署时,RESTEasy 使用 ResourceBuilder 为各个 JAX-RS 资源创建元数据。此类元数据使用软件包 org.jboss.resteasy.spi.metadata 中的 元数据 SPI 定义,特别是 ResourceClass 接口:

package org.jboss.resteasy.spi.metadata;

public interface ResourceClass
{
  String getPath();

  Class<?> getClazz();

  ResourceConstructor getConstructor();

  FieldParameter[] getFields();

  SetterParameter[] getSetters();

  ResourceMethod[] getResourceMethods();

  ResourceLocator[] getResourceLocators();
}

RESTEasy 允许通过提供 ResourceClassProcessor 接口的实施来自定义元数据生成。以下示例演示了这个 SPI 的用法:

package org.jboss.resteasy.test.core.spi.resource;

import org.jboss.logging.Logger;
import org.jboss.resteasy.spi.metadata.ResourceClass;
import org.jboss.resteasy.spi.metadata.ResourceClassProcessor;

import javax.ws.rs.ext.Provider;

@Provider
public class ResourceClassProcessorImplementation implements ResourceClassProcessor {

    protected static final Logger logger = Logger.getLogger(ResourceClassProcessorImplementation.class.getName());
@Override
    public ResourceClass process(ResourceClass clazz) {
        logger.info(String.format("ResourceClassProcessorImplementation#process method called on class %s",
                            clazz.getClazz().getSimpleName()));
        String clazzName = clazz.getClazz().getSimpleName();
        if (clazzName.startsWith("ResourceClassProcessorEndPoint")
                || clazzName.equals("ResourceClassProcessorProxy")
                || clazzName.equals("ResourceClassProcessorProxyEndPoint")) {
            return new ResourceClassProcessorClass(clazz);
        }
        return clazz;
    }

使用 ResteasyProviderFactory 类存储的新处理器作为常规的 JAX-RS 标注的提供程序解析。它们允许使用可用于各种高级场景的自定义版本嵌套资源元数据类,例如:

  • 向资源中添加其他资源方法或定位器.
  • 修改 HTTP 方法.
  • 修改 @Produces 或 @Consumes 媒体类型.
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.