2015-06-20 24 views
7

Tôi sử dụng Resteasy kết hợp với Google Guice bằng Resteasy-Guice. Tôi đã tìm cách để xác nhận các cơ quan yêu cầu của mình. Tôi muốn làm ví dụ:Cách thích hợp để xác thực yêu cầu với Resteasy là gì?

public static class MyPojo { 

    @NotEmpty private String contents; 

} 

Và sau đó sử dụng trong tài nguyên của tôi

@POST 
@ValidateRequest 
public void doPost(@Valid MyPojo myPojo) { 
    // use myPojo only if valid 
} 

Tôi đã được làm việc với các nhà cung cấp validator-resteasy-ngủ đông-. Nhưng kể từ khi tôi chuyển sang phiên bản mới hơn, điều này đã giới thiệu sự phụ thuộc (không mong muốn) đối với EJB. Xem thêm: RESTEASY-1056. Trong các nhận xét được thông báo rằng bạn nên chuyển sang trình xác thực-11 mới hơn thay thế:

Chuyển sang resteasy-validator-provider-11, thực hiện đặc tả Bean Validation 1.1 mới hơn.

Các docs nói:

Validation được bật theo mặc định (giả sử resteasy-validator-cung cấp-11-.jar có sẵn), mặc dù tham số và xác nhận giá trị trả về có thể được tắt hoặc sửa đổi trong tệp cấu hình validation.xml. Xem tài liệu Hibernate Validator để biết chi tiết.

tuy nhiên tôi không quản lý để có được điều này làm việc với cấu hình của tôi, bởi vì tôi thấy mình trong đó có phụ thuộc như hibernate-validator, javax.el-api, javax.elhibernate-validator-cdi và chú thích như ValidateOnExecution. Tuy nhiên, tôi không tìm thấy bất kỳ yêu cầu nào trong số này được yêu cầu ngay lập tức hoặc không hợp lệ bị từ chối.

Cách ưa thích, trọng lượng nhẹ và hoạt động để xác thực với Resteasy là gì?

Trả lời

3
  • tôi vô tình đã có một sự phụ thuộc bắc cầu vào hibernate-validator-provider khiến cố gắng trước đó thất bại. Đảm bảo rằng bạn không có phụ thuộc transitive vào hibernate-validator-provider. Đối với tôi điều này gây ra ngoại lệ sau: issues.jboss.org/duyệt/RESTEASY-826.
  • Dựa trên Thomas answer tôi đã thêm phụ thuộc vào javax.validation, resteasy-validator-provider-11, hibernate-validator.
  • Sau đó, tôi vẫn nhận được ngoại lệ (java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundException). Dựa trên this câu trả lời tôi đã thêm javax.el-apiel-impl làm phụ thuộc. Tôi nghĩ rằng điều này là bởi vì tôi sử dụng một container servlet nhúng.
  • tôi phải loại bỏ các @ValidateOnRequest chú thích trên các nguồn lực, họ không cần thiết nữa

cuối cùng cấu hình làm việc:

<dependency> 
     <groupId>javax.validation</groupId> 
     <artifactId>validation-api</artifactId> 
     <version>1.1.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-validator-provider-11</artifactId> 
     <version>3.0.11.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>5.0.1.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.el</groupId> 
     <artifactId>javax.el-api</artifactId> 
     <version>3.0.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.web</groupId> 
     <artifactId>el-impl</artifactId> 
     <version>2.2</version> 
    </dependency> 
4

Bạn không phải chỉ định bất kỳ chú thích nào trên chính tài nguyên hoặc thực hiện cấu hình bổ sung. Chỉ cần các chú thích ràng buộc trên POJO là đủ để nó hoạt động.

thiết lập của tôi là như sau:

Phương pháp nguồn:

@POST 
public void doPost(@Valid MyPojo myPojo) { 
    // use myPojo only if valid 
} 

Các POJO:

public static class MyPojo { 
    @NotEmpty private String contents; 
} 

Thử nghiệm với các phụ thuộc sau:

javax.validation phiên bản 1.1.0.Final

resteasy-validator-provider-11 phiên bản 3.0.11.Final

hibernate-validator phiên bản 5.0.0.Final5.0.1.Final

+0

Tôi đã gỡ bỏ tất cả phụ thuộc xác nhận và sau đó chèn của bạn với cùng một phiên bản. Tuy nhiên, bây giờ tôi đã gặp vấn đề sau: https://issues.jboss.org/browse/RESTEASY-826 –

Các vấn đề liên quan