2017-02-15 7 views
2

私はdropwizard 1.0.6アプリケーションを持っています。 、インターフェイスでのJAX-RS検証メッセージ

public class UserResource implements UserEndpoint { 
    public Response createUser(String username, String password) { 
     //my logic here 
    } 
} 

これは驚くほど動作します:

@Path("/user") 
@Produces(MediaType.APPLICATION_JSON) 
public interface UserEndpoint { 
    @POST 
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
    Response createUser(
     @FormParam("username") @NotEmpty @Email String username, 
     @FormParam("password") @Size(min=4) String password); 
} 

とresepective資源:私は次のようにこのインタフェースを実装するインターフェイス上のすべてのJAX-RSと検証注釈を入れ、その後、私のリソースを登録したいです

createUser.arg0 not a well-formed email address

私はそれらを期待しながら、:になってきたエラー応答での検証メッセージを除き、 :

form field username not a well-formed email address

UPDATE:

私はストレートUserResourceにJAX-RSと検証注釈を追加した場合、検証メッセージは、私が期待するものである:それはパラメータの名前を報告します@FormParam注釈で指定されています。これは私が達成したいことですが、インタフェースに注釈を付けることです。

+0

から注釈を検索するためにDropwizardに貢献する必要があるでしょうか? –

+0

はい、正確です。私が望むメッセージは、私がインターフェースを使用せず、すべての注釈がリソース上にあった場合のものです。 – JChrist

答えて

1

実行時にパラメータの実名がJVMで利用できないため、この問題を解決するためにarg0に置き換えられています。ParameterNameProviderを処理しなければなりません。文字列のリストgetParameterNames(Method yourExceptionImpl)

+0

私はリソースそのものに注釈があれば、検証メッセージはそれぞれの '@ XXXParam'アノテーションの名前を' @ FormParam'で使用します。なぜアノテーションがインターフェイス上にあるときにこれが機能しないのだろうと思っていました。私はこれを反映するために私の質問を更新します。 – JChrist

+0

これは、仕様が、継承されたものに依存してアノテーションを常によりよく繰り返すようにする理由です –

3

注釈は、@Inheritedと注釈が付けられていない限り、継承されません。 Java Language Specification

注釈の継承はクラスのみ(ないメソッド、インターフェース、またはコンストラクタ)上で動作パー

だから、それが親をチェックする場合は、アノテーションを使用したいコード次第です注釈のためのクラス/インタフェース。言い換えれば

あなたがインターフェイスを使用していないとき、あなたが希望のメッセージを取得し、それは親のクラス/インタフェース

関連する問題