day*_*mer 10 java rest jax-rs jersey resteasy
目前,我做了类似的事情
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);
}
}
Run Code Online (Sandbox Code Playgroud)
不,如果我添加十个新Resource
的ApplicationPath
,我需要做
classes.add(<ClassName>.class);
Run Code Online (Sandbox Code Playgroud)
十次,这是乏味的,有时也是健忘的.
请问JAX-RS
或RESTEasy
提供,这样我可以提包名和类是在它扫描的方式吗?
我知道Jersey
有一些东西
public class MyApplication extends ResourceConfig {
public MyApplication() {
packages("org.foo.rest;org.bar.rest");
}
}
Run Code Online (Sandbox Code Playgroud)
有什么想法/想法吗?
UPDATE
似乎我们可以做到以下 web.xml
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
有具体的Java
等价物吗?
Pau*_*tha 10
"是否有特定的Java等价物?"
只需将该类留空,意味着不要覆盖getClasses()
或getSingletons()
.根据规范 - 2.3.2:
[...]
在任何一种情况后两种情况下,如果同时
Application.getClasses
并Application.getSingletons
返回一个空列表,然后打包在Web应用程序根目录的所有资源类和供应商必须被包含在发布的JAX-RS应用程序.如果两个getClasses
或getSingletons
返回一个非空列表那么只有那些类或单身返回必须包括在公布的JAX-RS应用程序.
所以你可以做到
@ApplicationPath("oauth")
public class OAuthApplication extends Application {}
Run Code Online (Sandbox Code Playgroud)
并且您的类路径将被扫描@Path
并进行@Provider
分类.覆盖任一方法(返回非空集),只添加那些类.
还应该注意的是,public Map<String, Object> getProperties()
可以安全地覆盖.您可以使用它来添加任意属性(甚至可以注册类/功能),如此处所示,或者如果您需要配置提供程序,您可以在此处Feature
或DynamicFeature
在此处看到
小智 2
是所有Application类、ResourceClass和@ApplicationPath的组合
与文档和由 jersey 实现的类ResourceConfig一致,做法是:
@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");
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助你
归档时间: |
|
查看次数: |
10044 次 |
最近记录: |