2012-02-29 25 views
22

Tôi cần xây dựng phía máy chủ của API JSON-REST và tôi đã chơi với Jersey để làm điều đó (sử dụng tính năng lập bản đồ JSON-POJO).Một giải pháp thay thế tốt hơn cho Jersey/Jackson để xây dựng các API REST JSON?

Vấn đề là ngay cả khi thử nghiệm trường hợp sử dụng đơn giản nhất có thể đã yêu cầu một số câu hỏi ở đây trên SO, và khá một chút săn bắn xung quanh. Tóm lại, nó không phải là một API rất linh hoạt theo phong cách của JSoup, nó dường như là một công cụ đến từ thời đại mà mọi thứ đều là XML, và sau đó nó được trang bị thêm cho JSON.

Bạn có thể thấy điều này, ví dụ, trong yêu cầu đối tượng POJO cần được chú thích bằng @XmlRootElement mặc dù không có gì tôi đang làm liên quan đến XML.

Tôi tự hỏi nếu có các thư viện khác, có lẽ gần đây hơn, tôi nên cân nhắc điều này có thể dễ sử dụng hơn Jersey?

+10

CÓ! VÂNG! CHO TÌNH YÊU CỦA CHÚA CÓ! Tôi đã hỏi cùng một loại câu hỏi bây giờ hơn và hơn nữa và tôi tiếp tục nhận được ít để không có gì trở lại. Tôi thậm chí đã bỏ một khoản tiền thưởng 300pt và vẫn không có gì: [ở đây] (http://stackoverflow.com/questions/6986365/java-rest-client-jax-rs-automatic-type-mapping). [Và điều này thật thú vị.] (Http://stackoverflow.com/questions/6312030/cxf-no-message-body-writer-found-for-class-automatically-mapping-non-simple-r). Tôi không biết tại sao chúng tôi chưa có dịch vụ web trong java bị ràng buộc. – javamonkey79

Trả lời

3

để chuyển đổi json thành pojos: gsonjackson. Đối với Restful Tôi muốn sử dụng spring hoặc restlet.

+0

Vâng, tôi rất quen thuộc với Gson, và Jersey đã sử dụng Jackson, nhưng việc chuyển đổi JSON sang và từ POJO chỉ là một phần của vấn đề, tôi đang tìm kiếm một giải pháp thay thế cho Jersey, một khuôn khổ để xây dựng REST- API HTTP. Nếu một người tồn tại, tôi thích một khuôn khổ HTTP làm việc với Gson thay vì Jersey vì tôi cảm thấy thoải mái hơn với nó. – sanity

+1

@sanity oh, spring rồi – NimChimpsky

4

Tôi rất khuyên bạn nên JBoss RESTEasy cho API REST. Tôi đã sử dụng nó trên một vài dự án và thấy nó là tầm thường để thiết lập. Nó cũng tích hợp độc đáo với Spring nếu bạn cần.

Tôi đã sử dụng cả Jackson và Gson để hỗ trợ JSON với RESTEasy và nó khá đơn giản. Tất cả những gì bạn làm là chú thích POJO với chú thích JAXB và bao gồm các thư viện thích hợp.

Một phần thực sự tuyệt vời khác của RESTEasy là hỗ trợ tốt cho dữ liệu biểu mẫu nhiều phần. Chúng cung cấp chú thích @MultipartForm cho phép bạn liên kết một biểu mẫu nhiều phần với POJO mà không cần viết bất kỳ mã nào ... hoạt động trơn tru.

Tôi khuyên bạn nên chống lại Spring MVC cho REST vì nó không tuân thủ JAX-RS. Sử dụng giao diện tuân thủ JAX-RS mang lại cho bạn khả năng di động tốt hơn một chút nếu bạn quyết định chuyển sang triển khai khác trên đường.

+0

Hmm, tôi không chắc, có vẻ như nó sẽ được triển khai trong một tập tin chiến tranh, và tôi muốn tránh một container servlet hạng nặng và tất cả cơ sở hạ tầng đó, API chỉ là một nhỏ một phần của dự án của tôi, tôi không muốn nhồi nhét toàn bộ thứ trong một cuộc chiến chỉ để tôi có thể hỗ trợ API: -/ – sanity

+0

Chạy nó trên Jetty ... nó sẽ có trọng lượng nhẹ! –

2

Lưu ý: Tôi là EclipseLink JAXB (MOXy) chì, một thành viên của nhóm chuyên gia JAXB (JSR-222) và đóng góp cho dự án Jersey.

Với Jersey hoặc bất kỳ dự án JAX-RS nào, bạn có thể sử dụng MessageBodyReader/MessageBodyWriter để kiểm soát hoàn toàn ràng buộc JSON của mình. Dưới đây là một ví dụ về việc sử dụng cơ chế này để tận dụng MOXy làm nhà cung cấp JSON.

0

Như NimChimpsky mentioned Restlet sẽ làm điều này ra khỏi hộp. Hơn nữa, nếu khách hàng của bạn cũng là java, bạn có thể tóm tắt các chức năng vào một giao diện và bọc nó với một proxy phía khách hàng khá dễ dàng. Trang hướng dẫn này cho thấy cách thực hiện những gì tôi đã đề cập here.

9

Jersey có thể tuần tự hóa các POJO thành JSON mà không có bất kỳ chú thích nào sử dụng Jackson. Bạn định cấu hình cài đặt này bằng cách đặt thuộc tính JSONConfiguration.FEATURE_POJO_MAPPING thành true.

Trong web.xml, thêm tham số servlet init sau:

<init-param> 
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
    <param-value>true</param-value> 
</init-param> 

See the Jersey documentation

+0

Lưu ý rằng tài liệu hướng dẫn Jersey2 sử dụng Jackson là imo nghèo/thiếu/ngày. Hãy xem câu hỏi này và trả lời http://stackoverflow.com/questions/17511268/cant-enable-pojo-based-json-binding-support-for-jackson-in-jersey-2-0. –

1

Đây là một câu trả lời thiên vị, nhưng chúng tôi đã được sử dụng Tuyết cho tất cả các doanh nghiệp của chúng tôi & ứng dụng xã hội và nó là vô cùng nhẹ , hoàn toàn dựa trên Guice và cho phép bạn liên kết bất kỳ lệnh REST nào với bất kỳ Phương thức Java nào (với đối tượng được quản lý bởi Guice). Rất linh hoạt và đơn giản.

http://britesnow.com/snow

Tôi là tác giả của khuôn khổ vi này, vì vậy, tôi rất thích để có được thông tin phản hồi của bạn.

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