【发布时间】:2015-08-19 19:36:52
【问题描述】:
我计划在 RestEasy 框架 (3.0.11) 和 servlet 版本 3 的帮助下实现 Rest 服务。
我在运行时使用了resteasy-scan上下文来扫描我的rest服务,但由于servlet 3.0版因此它不是扫描并抛出异常(部署在tomcat7中)。
您能否建议我解决问题,如何扫描其余服务?
web.xml 的任何示例或配置都可以。
【问题讨论】:
我计划在 RestEasy 框架 (3.0.11) 和 servlet 版本 3 的帮助下实现 Rest 服务。
我在运行时使用了resteasy-scan上下文来扫描我的rest服务,但由于servlet 3.0版因此它不是扫描并抛出异常(部署在tomcat7中)。
您能否建议我解决问题,如何扫描其余服务?
web.xml 的任何示例或配置都可以。
【问题讨论】:
没有any web.xml(RESTeasy servlet)配置的一种方法是只使用一个空的Application 子类,并用@ApplicationPath 注释(用于url 映射)。
根据 JAX-RS 规范,在 Servlet 3.x 环境中,如果您有以下情况
@ApplicationPath("/api")
public class MyAppliation extends Application {
}
这足以使应用程序通过类路径扫描注册资源类和提供者。相反,我们可以通过这种方式显式注册资源类和提供者
@ApplicationPath("/api")
public class MyAppliation extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(MyResource.class);
return classes;
}
@Override
public Set<Object> getSingletons() {
Set<Object> singletons = new HashSet<Object>();
singletons.add(new MyFilter());
return singletons;
}
}
根据规范,一旦我们从这些重写方法之一返回一个 非空 集,则假定应用程序负责所有注册,并且类路径注册被禁用。
现在这不是你想要的,它只是空类工作的背景。
【讨论】: