有条件地公开REST资源

时间:2017-10-12 14:07:00

标签: java rest

我正在尝试使用注释而不是部署描述符在Java中编写示例REST服务。

@ApplicationPath("/services")
public class RestApp extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        final Set<Class<?>> classes = new HashSet<>();
        classes.add(Request.class);
        return classes;
    }
}

示例请求类

@Path("sequence-numbers")
public class Request {
@POST
    @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response createInstance(SnsConfig snsConfig, @Context final HttpServletResponse servletResponse,
                @Context final HttpServletRequest servletRequest) {
    }
}

如果从代码中删除了classes.add(Request.class),则不应公开@Path(&#34; sequence-numbers&#34;)。但即使我注释掉classes.add语句,post方法也会在发送请求时被触发。我对注释的使用是错误的还是有其他可能导致这种情况的原因?

编辑:我尝试注释掉整个getClasses方法,但仍然有效。我想如果在@ApplicationPath下没有指定类,则会扫描所有文件是否存在@Path。我想使用getClasses的原因是检查一些特定于应用程序的条件,并决定添加或不添加类/ @Path。有没有办法根据条件公开REST资源?

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。如果您在getClasses()方法中返回空集,或者未从getClasses()覆盖getSingletons()(或javax.ws.rs.core.Application),则会扫描所有路径。如果返回非空集,则仅发布指定的类。