如何在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
相关产品推荐
相关产品推荐

