2016-05-02 19 views
0

受信リソースのIDがIdValidationでアノテーションされている場合、着信リクエストのIDを検証するフィルタがあります。 thisチュートリアルの説明に従って、このフィルタをweb xmlに追加しようとしました。ただし、IdValidationアノテーションを使用してメソッドをテストするときはフィルタは呼び出されません。Web経由のジャージフィルター登録が動作していません

@Provider 
@IdValidation 
public class IdValidationFilter implements ContainerRequestFilter { 
    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException { 
     this.requestContext = requestContext; 
     MultivaluedMap<String, String> map = requestContext.getUriInfo().getPathParameters(); 
     if (map.containsKey("someId")) { 
      // Do some validation and abort if nessecary 
     } 
    } 
} 

私はこのフィルタを追加するために使用するインターフェイスです。

@NameBinding 
@Retention(RetentionPolicy.RUNTIME) 
public @interface IdValidation {} 

ウェブXML。フィルタは同じパッケージに入っているので、これは必要ではないと思うので、最初はプロバイダのクラス名なしで試しましたが、これはどちらもうまくいきませんでした。

<servlet> 
    <servlet-name>Jersey Web Application</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>my.package</param-value> 
    </init-param> 

    <init-param> 
     <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value>my.package.IdValidationFilter</param-value> 
    </init-param> 
</servlet> 

答えて

1

このコードを試してみてください -

import java.io.IOException; 
import java.lang.annotation.Annotation; 
import javax.servlet.http.HttpServletRequest; 
import javax.ws.rs.ext.Provider; 
import javax.ws.rs.container.ContainerRequestContext; 
import javax.ws.rs.container.ContainerRequestFilter; 
import javax.ws.rs.container.ResourceInfo; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.Response; 

@Provider 
public class IdValidationFilter implements ContainerRequestFilter { 

    @Context 
    private ResourceInfo resourceInfo; 

    @Context 
    private HttpServletRequest request; 

    @Override 
    public void filter(final ContainerRequestContext requestContext) throws IOException { 


     for (Annotation annotation : resourceInfo.getResourceMethod().getDeclaredAnnotations()) { 

      if (IdValidation.class == annotation.annotationType()) { 
       this.requestContext = requestContext; 
      MultivaluedMap<String, String> map = requestContext.getUriInfo().getPathParameters(); 
      if (map.containsKey("someId")) { 
        // Do some validation and abort if nessecary 
      } 
      } 
     } 
    } 

} 
0

あなたはパラメータを検証したい場合、私はあなたがジャージーのBean Validationサポートを見ている必要があります示唆しています。

関連する問題