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

如何在Jersey 1.8中限制内部API方法/资源不发布到application.wadl?

如何在Jersey 1.8中排除API不被发布到application.wadl

当然可以实现!在Jersey 1.8版本中,你有两种常用的方式来隐藏内部API,不让它们出现在自动生成的application.wadl文件里,下面分别说明:

方法一:使用@Hidden注解(最简单直接)

Jersey 1.8提供了com.sun.jersey.api.core.Hidden注解,你可以把它添加在整个资源类或者单个方法上,生成WADL时就会自动忽略这些被标记的元素。

示例代码:

import com.sun.jersey.api.core.Hidden;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;

// 标记整个资源类为内部API,完全不进入WADL
@Hidden
@Path("/internal-system")
public class InternalSystemResource {
    @GET
    @Path("/status")
    public Response getSystemStatus() {
        return Response.ok("internal status").build();
    }
}

// 只隐藏单个内部方法,其他方法正常出现在WADL中
@Path("/user-service")
public class UserServiceResource {
    @GET
    @Path("/profile")
    public Response getUserProfile() {
        return Response.ok("public profile").build();
    }

    // 这个方法不会出现在WADL里
    @Hidden
    @GET
    @Path("/reset-password-internal")
    public Response resetPasswordInternal() {
        return Response.ok("password reset").build();
    }
}

方法二:自定义WadlGenerator(灵活过滤)

如果需要更复杂的过滤逻辑(比如根据路径规则、自定义注解或者其他业务条件来筛选),可以自定义WadlGenerator来控制哪些资源/方法被包含进WADL。

步骤1:实现自定义WadlGenerator

import com.sun.jersey.api.model.AbstractResource;
import com.sun.jersey.server.wadl.generators.WadlGeneratorImpl;
import com.sun.research.ws.wadl.Resource;

public class InternalApiWadlFilter extends WadlGeneratorImpl {
    @Override
    public Resource createResource(AbstractResource abstractResource) {
        // 过滤路径包含"/internal"的整个资源
        if (abstractResource.getPath().contains("/internal")) {
            return null;
        }

        // 过滤资源中路径包含"/internal-"的单个方法
        abstractResource.getResourceMethods().removeIf(method -> 
            method.getPath().map(path -> path.contains("/internal-")).orElse(false)
        );

        return super.createResource(abstractResource);
    }
}

步骤2:配置WadlGeneratorConfig

import com.sun.jersey.api.wadl.config.WadlGeneratorConfig;
import com.sun.jersey.api.wadl.config.WadlGeneratorDescription;
import java.util.List;

public class CustomWadlConfig extends WadlGeneratorConfig {
    @Override
    public List<WadlGeneratorDescription> configure() {
        return generator(InternalApiWadlFilter.class).descriptions();
    }
}

步骤3:在web.xml中配置

找到你的Jersey Servlet配置,添加WadlGeneratorConfig的初始化参数:

<servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <!-- 其他初始化参数 -->
    <init-param>
        <param-name>com.sun.jersey.config.property.WadlGeneratorConfig</param-name>
        <param-value>com.your.package.CustomWadlConfig</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

注意事项

  • @Hidden注解是Jersey 1.x特有的,如果你后续升级到Jersey 2.x,这个注解会被@ApiIgnore替代,但在1.8版本中它完全可用。
  • 自定义WadlGenerator的方式更灵活,适合需要批量过滤或者复杂规则的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:33:43