8

問題の背景

Resteasy の を介して Spring を使用する Resteasy サービスがありますSpringContextLoaderListener。これは Resteasy バージョン に基づいてい3.0-beta-6ます。

着信リクエストで Bean バリデーションを使用したいのですが、Resteasy にバリデーターを呼び出させることができません。検証が構成されていないように動作し、単にメソッドに無効な入力オブジェクトを渡します。

質問

  1. Resteasy で Bean 検証を有効にするにはどうすればよいですか?

私が試したこと

私は次のことをしました:

  1. 私のリソースクラスに注釈を付けました@ValidateRequest
  2. メソッドパラメーターに注釈を付けました@Valid
  3. 入力クラスの制約に注釈を付けました。
  4. への依存関係を追加しましたresteasy-hibernatevalidator-provider

リソース:

@Named
@Path("users")
@ValidateRequest
public class UserResource 
{
    /**
     * 
     * @param user
     * 
     * curl -x POST http://localhost:7016/api/1.0/users
     * 
     */
    @POST
    @Consumes({MediaType.APPLICATION_JSON})
    @Produces({MediaType.APPLICATION_JSON})
    public Response createUser(@Valid User user)
    {
        //User creation logic here.
    }
}

ユーザー POJO:

@JsonPropertyOrder({
    "user_id",
    "user_name",
    "email"
})
public class User
{
    @JsonProperty("user_id")
    private Long userId;

    @JsonProperty("user_name")
    @NotNull(message = "Username must be provided")
    private String username;

    @Email(message = "Invalid email address.")
    private String email;

    //Getters and Setters Removed for Brevity
}

検証用のPOMエントリ:

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-hibernatevalidator-provider</artifactId>
        <version>${resteasy.version}</version>
    </dependency>

依存関係は、とそれに関連付けられたresteasy-hibernatevalidator-providerをもたらします。HibernateValidatorContextResolverHibernateValidatorAdapter


更新 (2013 年 6 月 18 日):

pom の Resteasy バージョンを元に戻し、2.3.5.Finalコードを変更せずに Bean 検証が機能し始めました。

4

3 に答える 3

1

Resteasy '3.0.6.Final' および Spring '4.1.0.RELEASE' で実行。

「resteasy-hibernatevalidator-provider」は、@Valid アノテーション付きパラメーターを評価しません。「resteasy-validator-provider-11」を使用するとすべてが機能し、ボーナスとして、「resteasy-hibernatevalidator-provider」を使用するときに Hibernate バリデーター バージョン 4 を必要とする代わりに、Hiberbate バリデーター「5.0.1.Final」を使用します。

于 2015-03-02T07:42:06.153 に答える
0

あなたはこれをしましたか:

ValidatorAdapter を RESTEasy に提供する

RESTEasy は、クラスパスの ContextResolver プロバイダーを通じて ValidatorAdapter の実装を取得しようとします。次のような実装で RESTEasy を提供できます。

@Provider
public class MyValidatorContextResolver implements ContextResolver<ValidatorAdapter> {

   @Override
   public ValidatorAdapter getContext(Class<?> type) {
      return new MyValidator(); 
   }

}
于 2013-06-09T01:07:41.193 に答える