Spring 4 vs Jersey cho các dịch vụ web REST


117

Chúng tôi đang có kế hoạch tạo một ứng dụng mới với phiên bản mùa xuân 4.0.6. Chúng tôi sử dụng bộ điều khiển có thể trả về "XML" hoặc "JSON". Trong dự án trước, chúng tôi đã triển khai thành công Jersey với hỗ trợ Spring cho REST bằng cách sử dụng API JAX-RS, nhưng sau khi đọc một vài bài báo và đề xuất từ ​​các tiền bối, họ cho biết spring đang cung cấp hỗ trợ REST khá tốt.

Một số điểm khiến tôi thực sự bối rối nếu tôi sử dụng hỗ trợ Spring REST mà không sử dụng JAX-RS và Jersey là:

  1. Làm thế nào để sắp xếp và quản lý được thực hiện trong Spring MVC?

  2. Có cần thiết cho soái ca hay không cần sử dụng jax-rs.

  3. Nếu việc sắp xếp và bỏ quản lý được tự động xử lý bởi mùa xuân thì làm thế nào nó biết về xmlRootElements.

Tôi vẫn đang bối rối nếu Spring chứng minh sự ủng hộ rất tốt của REST thì tại sao mọi người vẫn đi với Jersey cho REST? Thực sự muốn biết thêm chi tiết.

Nếu tôi có nói gì sai xin hãy bỏ qua. Giải thích với ví dụ thực sự hữu ích.

Cảm ơn trước!!

Câu trả lời:


119

Tôi muốn nói rằng cả Jersey và Spring MVC đều tuyệt vời - mỗi dự án đều có phong cách và thế mạnh riêng. Dù sao, Stack Overflow không phải là nơi thích hợp để đưa ra những so sánh chủ quan (câu hỏi của bạn sẽ được kết thúc khá nhanh). Nếu bạn đã sử dụng Spring cho mọi thứ khác và không bắt buộc phải sử dụng JAX-RS, thì Spring MVC hoàn toàn có ý nghĩa.

Về các tính năng như (un) marshalling, xét cho cùng thì JAX-RS chỉ là một thông số kỹ thuật - các thư viện khác có thể cung cấp các tính năng tương tự mà không cần triển khai cùng một API.

  1. Thay vì MessageBodyReaders / Writers, Spring MVC đang sử dụng HttpMessageConverters để xử lý (bỏ) sắp xếp tài nguyên REST. Spring MVC xử lý thương lượng nội dung và chọn công cụ chuyển đổi có sẵn tốt nhất cho công việc (bạn có thể chú thích các phương pháp để gợi ý về loại phương tiện mà họ sản xuất / tiêu thụ).

  2. Không, không cần thiết phải sử dụng JAX-RS để (un) tài nguyên. Trên thực tế, việc triển khai JAX-RS và Spring MVC sử dụng các thư viện tuần tự hóa của bên thứ ba để thực hiện công việc; vì vậy nó không bị ràng buộc với một tiêu chuẩn cụ thể.

  3. Trong phiên bản 4.0.6, Spring hỗ trợ nhiều HttpMessageConverters , với Jackson cho JSON, JAXB cho XML và nhiều loại khác. Spring 4.1.0 đã thêm nhiều HttpMessageConverters :

Để trả lời điểm cuối cùng của bạn, @XmlRootElementlà một chú thích JAXB và không phải là một phần của JAX-RS. Spring hỗ trợ JAXB .

Để có một ví dụ đầy đủ hơn với REST in Spring, hãy xem hướng dẫn bắt đầu này (bạn sẽ nhận được một ví dụ hoàn chỉnh chạy sau 10-15 phút).

Một lần nữa, phần cuối cùng của câu hỏi của bạn khá chủ quan - có rất nhiều giải pháp phổ biến để xây dựng các dịch vụ REST trong JVM, không chỉ Jersey và Spring (Dropwizard, Play! Framework, v.v.).


2
Bạn sẽ đề nghị ai đó hỏi một câu hỏi như thế này ở đâu?
swade

8
"câu hỏi của bạn sẽ được đóng lại khá nhanh"! Không nhanh như vậy :)
Afshin Moazami

6
Tôi có tình yêu stackoverflow và tôi yêu Quora, tôi chưa bao giờ thích đóng chính sách câu hỏi chủ quan này và tôi chưa bao giờ nghĩ đến việc đặt câu hỏi kỹ thuật trong Quora
Kalpesh Soni

Một câu hỏi tiếp theo, Liệu chúng ta có thể có cả Jersey và SpringRest trong cùng một EAR, cả hai đều chạy cùng nhau cho các nhóm dịch vụ khác nhau không?
pramodc84

22

Hỗ trợ AFAIK Spring REST dựa trên Spring MVC chứ không phải việc triển khai JAX-RS của nó trong khi Jersey đã triển khai đặc tả JAX-RS. Những người có Spring (Core, AOP hoặc MVC) trong dự án của họ chọn hỗ trợ Spring ReST qua trình triển khai JAX-RS.

Tôi đề xuất Jersey vì nó đã trưởng thành, thực hiện JAX-RS và dễ sử dụng.


1
Cảm ơn bạn đã trả lời, cách sắp xếp và tháo ráp được thực hiện vào mùa xuân mà không sử dụng jax-rs.
Robin Saxena,

Yeah tôi đồng ý với bạn. Spring Web MVC Rest không dễ sử dụng. Có rất nhiều cấu hình bạn cần phải quan tâm.
Evan Hu

2
Jersey cũng là một lựa chọn tốt nếu bạn sử dụng (hoặc bạn muốn sử dụng) khởi động mùa xuân. cf tài liệu
herau

1
Bạn có thể sử dụng thư viện GSON của Google để sắp xếp và bỏ điều khiển. Nó hỗ trợ Java chung và các đối tượng tùy chỉnh.
Tejzeratul
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.