目前,我做一些类似的事情
import javax.annotation.Nonnull;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
@ApplicationPath("oauth")
public class OAuthApplication extends Application {
final Set<Class<?>> classes = new HashSet<>();
@Nonnull
@Override
public Set<Class<?>> getClasses() {
classes.add(RegisterResource.class);
return Collections.unmodifiableSet(classes);
}
}
不,如果我在ApplicationPath
上添加十个新的Resource
,我需要进行
classes.add(<ClassName>.class);
十次,它是乏味的,有时也健忘。
JAX-RS
或RESTEasy
是否提供了一种方式,以便我可以提及包名称并在其下扫描类?
我知道Jersey
有
public class MyApplication extends ResourceConfig {
public MyApplication() {
packages("org.foo.rest;org.bar.rest");
}
}
参考
有什么想法吗?
更新
似乎我们可以在web.xml
中执行以下操作
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
是否有特定的Java
等效物?
"是否有特定的Java等价物"
只需将类留空,这意味着不要覆盖getClasses()
或getSingletons()
。根据规范2.3.2:
[…]
在后两种情况中的任何一种情况下,如果
Application.getClasses
和Application.getSingletons
都返回一个空列表,则打包在web应用程序中的所有根资源类和提供程序都必须包含在已发布的JAX-RS应用程序中。如果getClasses
或getSingletons
返回一个非空列表,那么只有返回的类或singleton必须包含在已发布的JAX-RS应用程序中。
所以你可以简单地做
@ApplicationPath("oauth")
public class OAuthApplication extends Application {}
并且您的类路径将被扫描@Path
和@Provider
类。重写任一方法(返回一个非空集),并且只添加那些类。
还应该注意的是,public Map<String, Object> getProperties()
可以被安全地覆盖。您可以使用它来添加任意属性(甚至注册类/功能),如图所示,或者如果您需要配置提供程序,您可以在Feature
或DynamicFeature
中这样做,如图
是所有应用程序类、ResourceClass和@ApplicationPath 的组合
与文档和ResourceConfig类一致,通过jersey实现的方法是:
@ApplicationPath(value = "/resource")
public class ApplicationREST extends ResourceConfig {
public ApplicationREST() {
//add single resources
register(SimpleResource1.class);
register(SimpleResource2.class);
...
//enable multipar feature
register(MultiPartFeature.class);
...
//enable scan package and recursive
packages(true, "com.example.rest");
}
}
我希望这能帮助你
这很简单:
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/webapi")
public class MyApp extends Application {
}
这将扫描所有用@Provider和@Path注释的类。