1

特定のエンドポイントを「オフ」にしているかどうかを確認したいと思います。現在、ContainerRequestFilter を介して実装されています。しかし、コントローラー/リソースレベルでフィルターに直接フックすることはできないため (私が知る限り)、フィルターから例外をスローし、それをクライアントに返すことをお勧めします。スタック トレースの代わりに、フォーマットされた json エラー レスポンスを参照してください。

次の制約インターフェイスとクラスを実装しました。

@NotNull
@Target({METHOD, FIELD, ANNOTATION_TYPE, PARAMETER})
@Retention(RUNTIME)
@Constraint(validatedBy = MethodNotImplementedImpl.class)
@Documented
public @interface MethodNotImplemented {
    String message() default "{Default message}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

public class MethodNotImplementedImpl implements ConstraintValidator<MethodNotImplemented, UriInfo>  {
    public void initialize(MethodNotImplemented constraintAnnotation) {logger.debug("init called");}
    public boolean isValid(UriInfo uriInfo, ConstraintValidatorContext constraintContext) {
        logger.debug("validate called");
        return true;
    }
}

各 rest メソッドに制約を実行させたいのですが、制約が起動していません。

@Validated
@Path("/people")
public class PeopleController extends BaseController {
@GET
@Path("/{peopleId}")
@Produces(MediaType.APPLICATION_JSON)
public Response getPeople(@MethodNotImplemented @Context UriInfo uriInfo,
                          @PathParam("peopleId") String peopleId,
                          @DefaultValue("") @QueryParam("fields") String partialResponseFields) {
....

すべてが正常にコンパイルおよびデプロイされますが、エンドポイントが呼び出されたときに init または isValid メソッドが呼び出されていません。アプリの POJO に設定された他のメソッド レベルの制約があり、メソッドが呼び出されると自動的に起動します。私がやろうとしていることは可能ですか?もしそうなら、私は何を間違っていますか?

4

1 に答える 1

0

Jersey 1.x (JAX-RS 1.1のRI) Bean Validationはサポートされていないため、例は機能しません。Bean Validation サポートは JAX-RS 2.0 に付属しており、Jersey 2.x ではほとんどそのままでサポートされています (jersey-bean-validationクラスパスにモジュールを追加する必要があり、それを使用できます)。ドキュメント ( Bean Validation Support ) とサンプルの 1 つ ( bean-validation-webapp ) を見ることができます。

Jersey 1.xでは、特定のリソースメソッドへのバインドフィルタ( / )に基づくResourceFilterFactory / ResourceFilterの概念を使用できます(つまり、例から)。このようなファクトリの例としては、セキュリティ アノテーションの存在 (つまりpackage から)に基づいてリソース メソッドにリクエスト フィルタを追加するRolesAllowedResourceFilterFactoryがあります。ContainerRequestFilterContainerResponseFiltergetPeople@RolesAllowedjavax.annotation.security

于 2013-10-15T19:40:16.780 に答える