0

我正在寻找一种简单的方法来验证正确的正文/查询/表单/等参数是否传递到请求中。(并且还警告未知/不需要的参数)我知道我可以在实际资源类中注入请求的上下文并以这种方式检查所有参数,但是在过滤器中是否有这样做?

我已经研究了UriInfoandExtendedUriInfo这将允许我获取资源类/方法但不显示参数。

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路径参数,而他们唯一可以传递的其他参数是user_id. 任何其他参数都应该收到警告。

我可以通过检查 vals/注入上下文在此方法中做到这一点,但是有没有办法ContainerRequestFilter在应用程序入口的实现中做到这一点?

4

1 回答 1

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>
于 2012-09-12T14:54:21.663 回答