2017-08-30 14 views
0

私は会社を代表するJPAエンティティを持っています。会社のウェブサイトのURLを表すフィールドがあります。永続化する前にURLが有効なウェブサイトURLであることを確認する必要があります。私は、httpまたはhttpsで始まるURLだけが有効なウェブサイトURLであると考えます。これをどのように強制できますか?私は最新のものを使用しています。私のJPAプロバイダとしてのHibernateのバージョンJPAエンティティのウェブサイトURLフィールドを検証する方法は?

+0

JPAアノテーションはデータ(モデル)上にあります。バリデーションのライブエフェクトは、GUIレイヤーに表示する必要があります。何かが両方を接続しなければなりません。最高ののは、完全なフレームワーク(WebアプリケーションのWebフレームワーク)であり、 'マニュアル'コードではありません。 –

+0

JPAはBean検証とは関係ありません。これはBean検証APIです –

答えて

0

Hibernate Validatorの@URLアノテーションを見てください。

+0

ありがとうございます。つまり、WebサイトのURLフィールドを 'java.net.URL'ではなく 'String'として表現する必要があります。私はそれがOKだと思います。しかし、どのように私は 'http'と 'https'のような複数のプロトコルを指定するのですか? '@URL' 'protocol'属性は単一の 'String'を取ります。 'file'、 'ftp'などのプロトコルを許可するべきだとは思わないでください。 – user247123

1

@dimitrisliは、あなたに正しい解決策を提案します。 @URLという制約を使用する必要があります。あなたが特定のプロトコルを許可する場合 - この制約の属性があります。また

@URL(protocol = "http") 
private String companyUrl; 

また、あなたのURLがあなたが好きな任意のパターンに一致するようにするために使用することができますregexp属性があります。

@URL(regexp = "^(http|ftp)") 
    private String companyUrl; 

あなたは(リンクセクションにURLを探してください)docで詳細を確認することができます。

また、あなたは、文字列の代わりにURLを使用したい場合、あなたはURLクラスとURL制約のために、独自のバリデータの実装を書くことができますが、作成プロセスの間に、それは失敗します無効URLを作成しようと思います場合は注意してください検証されたときではありません。したがって、URLのバリデータを書くことは、プロトコルやそのようなことをチェックしたい場合にのみ意味をなさないでしょう。あなたが詳細については

public class URLValidator implements ConstraintValidator<org.hibernate.validator.constraints.URL, URL> { 
... 
} 

を実装する必要があり、独自のバリデータを書き込むには

thisブログ記事をチェックしてください。

+0

regexpは私のためには機能しません。 regexp = "^(http | https)"のURLバリデーターに対してhttps://www.google.comを検証すると、検証に失敗します。 – user247123

+0

右...それはその式を 'String'値にマッチさせようとしているからです。あなたのgoogleでは、プロトコルで始まるわけではありません。 .. しかしそれは有効なURLですか? (プロトコルなしの場合) –

+0

私はそれを理解しました。これは、正規表現が、シンプルストリングの出現だけでなく、文字列全体にマッチしているからです。 regexp = "^(http | https)。*"というように*。を追加する必要がありました。 – user247123

関連する問題