2017-04-08 5 views
1

私はJavaの世界で初心者です(.Netの背景から来ました)。私はJerseyフレームワークを使用してRESTfulなサービスを作成しました。それは方法のカップルを持っています。以下は、カスタマーサービスのサンプルコードスニペットです。私のコードにはさらにいくつかのサービスがあります。RESTful APIによるカスタム検証

@Path("/CustomerService") 
public interface ICustomerService { 

    @POST 
    @Produces(MediaType.APPLICATION_JSON) 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Path("/getCustomerInfo") 
    Response query(String constraints); 

    @POST 
    @Produces(MediaType.APPLICATION_JSON) 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Path("/getCustomerDetails") 
    Response fetchDetails(String customerID); 

} 

クライアントに公開されている各APIで実行したい検証ロジックがあります。私はC#の世界で独自の検証ロジックを定義することができます。次のようなものです。これは、メソッドまたはコントローラレベルで適用できます。

[MyValdationLogic()] 

Javaに相当するものは何ですか?メソッド上の複数の場所に適用できるコードを作成するにはどうすればよいですか。

また、管理者がその設定で再生することを許可したくありません。私はフィルタと呼ばれるものがあることがわかりましたが、これは設定ファイルで設定されます。管理者はそれを無効にできます。

+0

同じことで詳細を確認することができます。これは、Bean検証注釈で行われます。 Jersey固有のサポートについては、https://jersey.java.net/documentation/latest/bean-validation.htmlを参照してください。 –

答えて

2

Validator classを作成し、beanValidator classを検証のために使用することができます。しかし、プロセスは少し長いですが。サンプルビーン

ジャージーリソース

@POST 
@Path("/addEmp") 
@Produces("text/plain") 
public String doOrder(@BeanParam final @Valid Employee emp) { 

    // Some implementation here 
} 

- - 後

は、これを行うの一例であると仮定 、私は、アドレスすなわちアドレスや都市または郵便番号必見のいずれかの検証を適用したいですそこにいる。

@Address 
public final class Employee { 

    @FormDataParam("id") 
    private String id; 

    @FormDataParam("address") 
    private String address; 

    @FormDataParam("city") 
    private String city; 

    @FormDataParam("postcode") 
    private String postcode; 

     // Other member variables 

     // Getters and setters 

} 

アドレス注釈 - このところで

public class AddressValidator implements ConstraintValidator<Address, Employee> { 

    @Override 
    public boolean isValid(Employee emp, ConstraintValidatorContext constraintValidatorContext) { 

    // Check for at least one value 
    if((emp.getAddress() != null && !emp.getAddress().equals("") || 
      (emp.getCity() != null && !emp.getCity().equals("")) || 
      (emp.getPostcode() != null && !emp.getPostcode().equals("")))) { 
     return true; 
    } 

    return false; 
    } 
    public void initialize(Address emp) { 
      ... 
    } 
} 

- ここ バリデータクラスは、実際の検証ロジックが含まれている - カスタムアドレスアノテーション

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE}) 
@Retention(RUNTIME) 
@Constraint(validatedBy = AddressValidator.class) 
@Documented 
public @interface Address { 

    String message() default "Address required"; 

    Class<?>[] groups() default {}; 

    Class<? extends Payload>[] payload() default {}; 
} 

バリデータクラスを定義します再利用可能な0123を作成することができます。このValidator classで従業員を直接雇う代わりに、Object classまたは親クラスを使用して、それに応じてロジックを変更することができます。

あなたはJavaでbean-validation

関連する問題