検証UUID RESTfulなサービス

Abraksis:

私が受けたRESTfulなサービス持っているPOSTとのリクエストをUUID値とDBに書き込むし。だから、問題があれば検証することでUUID有効かではありません。この目的のために、私は、カスタムアノテーションを実装しました:

@Constraint(validatedBy = {})
@Target({ElementType.FIELD})
@Retention(RUNTIME)
@Pattern(regexp = "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[34][0-9a-fA-F]{3}-[89ab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}")
public @interface validUuid {

    String message() default "{invalid.uuid}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

しかし、いくつかの理由のために、それは私が有効で合格しても、仕事をしないUUID、私は常に例外を取得します:

javax.validation.UnexpectedTypeException:HV000030:いいえバリデータは、制約「javax.validation.constraints.Pattern」の検証型「java.util.UUID」の見つけることができます

検証するための任意のオプションがありUUID、適切には?

ニコラス:

あなたは適用することはできません@Pattern何か(に注釈をjava.util.UUIDでないこと)CharSequence@Pattern注釈文書(emphesizes鉱山):

受け入れのCharSequenceをnull要素が有効と考えられています。

また、私の知る限り見るように、あなたは、新しい注釈の定義に渡すことで、検証注釈ハンドラの動作を拡張してみてください。

あなたは、より複雑な検証を実行したい場合は、単にあなたの注釈を作成せずに、別の検証アノテーション-その組み合わせは次のように動作しません。が存在しなければならない何か注釈を認識し、それらを検証します。

@Target({ElementType.FIELD})
@Retention(RUNTIME)
public @interface ValidUuid {

    String message() default "{invalid.uuid}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

さて、実装バリデータの作成ConstraintValidator<ValidUuid, UUID>、検証自体を実行するメソッドをオーバーライドしています。

public class UuidValidator implements ConstraintValidator<ValidUuid, UUID> {
    private final String regex = "....." // the regex

    @Override
    public void initialize(ValidUuid validUuid) { }

    @Override
    public boolean isValid(UUID uuid, ConstraintValidatorContext cxt) {
        return uuid.toString().matches(this.regex);
    }
}

そして、アノテーションを適用します。

@ValidUuid
private UUID uuId;

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=208569&siteId=1
おすすめ