问题Resteasy 3.09 CorsFilter
我尝试使用Resteasy 3.0.9中提供的新CorsFilter
。 我在本页面的底部find了一个示例: 使用JAX-RS / RESTEasy实现CORS的Ajax请求
如果我在Application
子类的方法getSingletons()
定义了这个filter,那么我的资源就不会被扫描了。 这意味着没有资源将被发现,并发生以下错误:
javax.ws.rs.NotFoundException: Could not find resource for full path Error Occures
在接下来的页面上,我发现了一个描述: javax.ws.rs.NotFoundException:找不到完整path的资源错误发生
但基本上,这个部署选项的作用是扫描应用程序的注解@Path,@Provider等。 原因是JAX-RS将首先分别在重写的getClasses()和getSingletons()中查找类和对象。 如果返回空集,则告诉JAX-RS进行扫描(按照规范)。
因此,如果我覆盖getSingletons()
方法,JAX-RS不会执行扫描吗? 是否有另一种方式来configuration此CorsFilter
并启用资源扫描?
“是否有另一种方法来configuration此CorsFilter并启用资源扫描?”
保持扫描的一种方法就是实现一个javax.ws.rs.core.Feature
import javax.ws.rs.core.Feature; import javax.ws.rs.core.FeatureContext; import javax.ws.rs.ext.Provider; import org.jboss.resteasy.plugins.interceptors.CorsFilter; @Provider public class CorsFeature implements Feature { @Override public boolean configure(FeatureContext context) { CorsFilter corsFilter = new CorsFilter(); corsFilter.getAllowedOrigins().add("*"); context.register(corsFilter); return true; } }
该function将像所有其他@Provider
和@Path
一样被扫描。
只用testing
@ApplicationPath("/api") public class RestApplication extends Application { }
C:\>curl -i http://localhost:8080/api/simple -H "Origin:stackoverflow.com" HTTP/1.1 200 OK Date: Wed, 01 Apr 2015 12:07:22 GMT Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: stackoverflow.com Content-Type: application/octet-stream Content-Length: 15 Server: Jetty(9.2.4.v20141103)
Hello Response!