2014-11-06 25 views
0

我在嘗試使RESTEasy過濾器正常工作時遇到問題。我確定我錯過了一些東西,但我不知道是什麼。如何製作RESTEasy Response Filter?

我用下面的方法測試:

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public List<User> listAll(@QueryParam("start") Integer startPosition, @QueryParam("max") Integer maxResult) { 
    String hql = "SELECT DISTINCT u FROM User u LEFT JOIN FETCH u.tasks ORDER BY u.id"; 
    TypedQuery<User> findAllQuery = em.createQuery(hql, User.class); 
    if (startPosition != null) { 
     findAllQuery.setFirstResult(startPosition); 
    } 
    if (maxResult != null) { 
     findAllQuery.setMaxResults(maxResult); 
    } 
    final List<User> results = findAllQuery.getResultList(); 
    return results; 
} 

而且這裏是我的web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    version="3.0" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <display-name>tasks-webapp</display-name> 
    <session-config> 
     <session-timeout>30</session-timeout> 
    </session-config> 
    <mime-mapping> 
     <extension>ico</extension> 
     <mime-type>image/x-icon</mime-type> 
    </mime-mapping> 
    <servlet> 
     <servlet-name>javax.ws.rs.core.Application</servlet-name> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <context-param> 
     <param-name>resteasy.providers</param-name> 
     <param-value>br.com.tasks.rest.CORSFilter</param-value> 
    </context-param> 
    <servlet-mapping> 
     <servlet-name>javax.ws.rs.core.Application</servlet-name> 
     <url-pattern>/api/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

最後,我的過濾器:

@Provider 
public class CORSFilter implements ContainerResponseFilter { 

    @Override 
    public void filter(final ContainerRequestContext requestContext, 
         final ContainerResponseContext cres) throws IOException { 
     cres.getHeaders().add("Access-Control-Allow-Origin", "*"); 
     cres.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization"); 
     cres.getHeaders().add("Access-Control-Allow-Credentials", "true"); 
     cres.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); 
     cres.getHeaders().add("Access-Control-Max-Age", "1209600"); 
    } 

} 

在該組合它不工作。我在過濾器中留下了一個斷點,它從來沒有被調用過。我正在測試郵差,我的標題丟失了。我在這裏看到了其他的問題,我遵循它的說明沒有成功。我嘗試了Application類,沒有任何東西。

有人幫我嗎?我很感激。 :)

+0

你有沒有設法解決這一問題? – 2015-06-15 18:34:53

+0

我有一個與RESTEasy請求過濾器類似的問題。它不會運行。我通過在擴展Application的類中指定過濾器來解決問題。 – user2367418 2017-10-05 03:04:28

回答

1

您是否嘗試過加入:

<context-param> 
    <param-name>resteasy.scan.providers</param-name> 
    <param-value>true</param-value> 
</context-param> 

爲了儘可能解釋here註冊您的供應商?因爲它似乎默認值是false

+0

我會盡快嘗試並報告結果。謝謝。 – 2014-11-06 09:35:18

+0

沒有成功。我把這段代碼放在web.xml中,但是我的過濾器仍然沒有調用,並且postman中的頭文件丟失了。有任何其他的詭計? – 2014-11-06 19:24:00

相關問題