2012-09-12 24 views
0

我正在尋找一種簡單的方法來驗證正確的body/query/form/etc參數是否傳遞到請求中。 (並且警告未知/不需要的參數)我知道我可以在實際的資源類中注入請求的上下文並檢查所有參數,但是在過濾器中是否有這樣做?在篩選器階段驗證Jersey請求參數

我查看了UriInfoExtendedUriInfo,這將允許我獲取資源類/方法但不顯示參數。

Resource類:

@GET 
    @Path("/{img_id}") 
    @Produces("application/json") 
    public Response getImgWithId(
     @PathParam("img_id") @DefaultValue("0") long imgId, 
     @QueryParam("user_id") @DefaultValue("-1") long userId) 

我想,以確保用戶通過一個img_id路徑PARAM,他們可以通過唯一的其他參數是user_id。任何其他參數都應該收到警告。

我可以在這裏通過檢查vals /注入上下文來做到這一點,但有一種方法可以在執行ContainerRequestFilter的應用程序時執行嗎?

回答

1

我想你可以繼承com.sun.jersey.spi.container.servlet.ServletContainer。

public class MyServletContainer extends 
    com.sun.jersey.spi.container.servlet.ServletContainer { 

@Override 
public void service(javax.servlet.http.HttpServletRequest request, 
     javax.servlet.http.HttpServletResponse response) { 
    // do your check 
    if (requestCheck()) { 
     super.service(request, response); 
    } else { 
     //write your warning info in response... 
    } 
} 
在web.xml

}

<servlet> 
    <servlet-name>RESTService</servlet-name> 
    <servlet-class>com.test.MyServletContainer</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>com.chihuo.resource</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>RESTService</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 
+0

感謝您的。將研究它。 我希望我不必重新設計來做到這一點。澤西顯然知道方法/調用是什麼,因此在過濾器中處理它似乎更合理。 – DOS