2013-07-27 19 views
0

我想通過通用過濾器解析GET響應,並根據收到的內容向客戶端發送響應。但我無法執行Filter類。我已經添加了下面的代碼片段。任何幫助,將不勝感激無法運行使用ContainerResponseFilter實現的過濾器

@FrontierResponse 
@Provider 
public class PoweredbyResponseFilter implements ContainerResponseFilter { 

@Override 
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) 
     throws IOException { 

    if (requestContext.getMethod().equals("GET")) { 
     System.out.println("hellos"); 
    } 

    //responseContext.getHeaders().add("X-Powered-By", "Jersey :-)"); 
} 

}

我的自定義註解

@Target({ElementType.TYPE, ElementType.METHOD}) 
@Retention(value = RetentionPolicy.RUNTIME) 
@NameBinding 
public @interface FrontierResponse { 
} 

,這是我的資源類

@GET 
@FrontierResponse 
@Produces({MediaType.TEXT_HTML, MediaType.APPLICATION_JSON}) 
public List<String> list() {...} 

更多的信息,我使用

球衣球衣束-1.17.jar javax.ws.rs-API-2.0.jar

回答

1

您需要通過@FrontierResponse,而不是資源類裝飾資源類的方法。或者,如果您想對所有請求使用過濾器,則可以註釋Application類的擴展名。 Check spec for more details.

編輯: @NameBinding自從v2.0開始在JAX-RS中。您需要使用該規範的實現,即Jersey 2.x。在運動衫1.x中,這個註釋將被忽略。

+0

實際上,這是一個資源類的「方法」不在Resource類中的註釋,但仍然沒有執行過濾器類。 –

+0

這可能與我使用的球衣版本有關。球衣1.17和javax.ws.rs-api-2.0,jar?會不會有任何圖書館版本衝突? –

+0

對不起,我已經看到了我想看的,而不是寫了什麼。 – swist

相關問題