2015-04-01 64 views
14

我試過使用Resteasy 3.0.9中提供的新的CorsFilter。我發現在這個頁面底部的例子: Ajax request with JAX-RS/RESTEasy implementing CORS問題Resteasy 3.09 CorsFilter

如果我定義的方法getSingletons()(該Application子類的)這個過濾器,那麼我的資源沒有得到了掃描。這意味着,沒有資源會被發現並出現以下錯誤:

javax.ws.rs.NotFoundException: Could not find resource for full path Error Occures

在接下來的頁面,我發現一個描述: javax.ws.rs.NotFoundException: Could not find resource for full path Error Occures

但基本上,這是什麼部署選項會爲應用程序掃描@Path,@Provider等的註釋。原因是JAX-RS將首先分別在重寫的getClasses()和getSingletons()中查找類和對象。如果返回空集,這會告訴JAX-RS進行掃描(按照規範)。

因此,如果我覆蓋getSingletons()方法JAX-RS不會執行掃描?是否有另一種方法來配置此CorsFilter並啓用資源掃描?

回答

24

「是否有另一種方法來配置此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; 
    } 
} 

此功能將得到掃描,就像所有其他@Provider S和@Path秒。

只有

@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!

測試