Spring 4 vs Jersey สำหรับบริการเว็บ REST


117

เรากำลังวางแผนที่จะสร้างแอปพลิเคชันใหม่ด้วยเวอร์ชันฤดูใบไม้ผลิ 4.0.6 เราใช้ตัวควบคุมที่สามารถส่งคืน "XML" หรือ "JSON" ในโครงการก่อนหน้านี้เราประสบความสำเร็จในการใช้ Jersey กับ Spring for REST โดยใช้ JAX-RS API แต่หลังจากอ่านบทความและคำแนะนำจากผู้อาวุโสแล้วพวกเขากล่าวว่าฤดูใบไม้ผลิให้การสนับสนุน REST ที่ค่อนข้างดี

บางประเด็นที่ทำให้ฉันสับสนจริงๆถ้าฉันใช้การสนับสนุน Spring REST โดยไม่ใช้ JAX-RS และ Jersey ได้แก่ :

  1. การจัดระเบียบและการไม่เข้าใจผิดใน Spring MVC เป็นอย่างไร

  2. จำเป็นไหมสำหรับการมาร์แชลหรือ unmarshaling จำเป็นต้องใช้ jax-rs

  3. หากมีการจัดการมาร์แชลและ unmarshaling โดยอัตโนมัติในฤดูใบไม้ผลิจะรู้ได้อย่างไรเกี่ยวกับ xmlRootElements

ฉันยังงงอยู่ว่า Spring พิสูจน์การสนับสนุน REST ได้ดีมากแล้วทำไมคนยังไปกับ Jersey for REST? ต้องการทราบรายละเอียดเพิ่มเติมจริงๆ

หากฉันพูดอะไรผิดโปรดเพิกเฉย คำอธิบายพร้อมตัวอย่างมีประโยชน์มาก

ขอบคุณล่วงหน้า!!

คำตอบ:


119

ฉันจะบอกว่าทั้ง Jersey และ Spring MVC นั้นยอดเยี่ยม - แต่ละโครงการมีสไตล์และจุดแข็งของตัวเอง อย่างไรก็ตาม Stack Overflow ไม่ใช่สถานที่ที่เหมาะสมสำหรับการถามการเปรียบเทียบแบบอัตนัย (คำถามของคุณจะถูกปิดอย่างรวดเร็ว) หากคุณใช้ Spring สำหรับสิ่งอื่นอยู่แล้วและไม่จำเป็นต้องใช้ JAX-RS Spring MVC ก็มีเหตุผล

เกี่ยวกับคุณสมบัติเช่น (un) marshalling JAX-RS เป็นเพียงข้อมูลจำเพาะเท่านั้น - ไลบรารีอื่น ๆ สามารถเสนอคุณสมบัติที่คล้ายกันได้โดยไม่ต้องใช้ API เดียวกัน

  1. แทนที่จะเป็นMessageBodyReaders / Writers Spring MVC ใช้HttpMessageConvertersเพื่อจัดการ (ยกเลิก) ทรัพยากร REST แบบมาร์แชล Spring MVC จัดการการต่อรองเนื้อหาและเลือกตัวแปลงที่ดีที่สุดสำหรับงาน (คุณสามารถใส่คำอธิบายประกอบวิธีการเพื่อบอกใบ้ประเภทสื่อที่ผลิต / บริโภค)

  2. ไม่ไม่จำเป็นต้องใช้ JAX-RS เพื่อ (ยกเลิก) ทรัพยากรมาร์แชล ในความเป็นจริงการใช้งาน JAX-RS และ Spring MVC ใช้ไลบรารีการทำให้เป็นอนุกรมของบุคคลที่สามในการทำงาน ดังนั้นจึงไม่ผูกติดกับมาตรฐานใดมาตรฐานหนึ่ง

  3. ในเวอร์ชัน 4.0.6 Spring รองรับHttpMessageConvertersจำนวนมากพร้อมด้วย Jackson สำหรับ JSON JAXB สำหรับ XML และอื่น ๆ อีกมากมาย สปริง 4.1.0 เพิ่มHttpMessageConvertersเพิ่มเติม:

    • ตอนนี้ Jackson พร้อมใช้งานสำหรับทั้ง JSON และ XML
    • Google Protobuf
    • Gson สำหรับ JSONเป็นอีกทางเลือกหนึ่งของ Jackson

เพื่อตอบประเด็นสุดท้ายของคุณ@XmlRootElementคือคำอธิบายประกอบ JAXB และไม่ได้เป็นส่วนหนึ่งของ JAX-RS ฤดูใบไม้ผลิสนับสนุน JAXB

หากต้องการดูตัวอย่างที่สมบูรณ์ยิ่งขึ้นเกี่ยวกับ REST ใน Spring โปรดดูคู่มือการเริ่มต้นใช้งานนี้ (คุณจะได้รับตัวอย่างที่สมบูรณ์ใน 10-15 นาที)

อีกครั้งในส่วนสุดท้ายของคำถามของคุณค่อนข้างเป็นอัตวิสัย - มีโซลูชันยอดนิยมมากมายสำหรับการสร้างบริการ REST ใน JVM ไม่ใช่เฉพาะ Jersey และ Spring (Dropwizard, Play! Framework ฯลฯ )


2
คุณจะแนะนำให้ใครถามคำถามแบบนี้ได้ที่ไหน
swade

8
"คำถามของคุณจะถูกปิดอย่างรวดเร็ว"! ไม่เร็วขนาดนั้น :)
Afshin Moazami

6
ฉันมีความรัก stackoverflow และฉันรัก quora ฉันไม่เคยชอบนโยบายคำถามอัตนัยแบบปิดนี้และฉันไม่เคยคิดที่จะถามคำถามทางเทคนิคใน quora
Kalpesh Soni

คำถามแทนเจนต์เราสามารถมีทั้ง Jersey และ SpringRest ใน EAR เดียวกันได้หรือไม่ทั้งคู่ทำงานร่วมกันสำหรับชุดบริการที่แตกต่างกัน?
pramodc84

22

การสนับสนุน AFAIK Spring REST ขึ้นอยู่กับ Spring MVC และไม่ใช่การใช้งาน JAX-RS ในขณะที่ Jersey ได้ใช้ข้อกำหนด JAX-RS ผู้ที่มี Spring (Core, AOP หรือ MVC) ในโปรเจ็กต์ของพวกเขาเลือกการสนับสนุน Spring ReST บนอุปกรณ์ JAX-RS

ฉันแนะนำให้ Jersey เป็นผู้ใหญ่ใช้ JAX-RS และใช้งานง่าย


1
ขอบคุณสำหรับคำตอบวิธีการทำมาร์แชลและ unmarshaling ในฤดูใบไม้ผลิโดยไม่ใช้ jax-rs
Robin Saxena

ใช่ฉันเห็นด้วยกับคุณ Spring Web MVC Rest ไม่ใช่เรื่องง่ายที่จะใช้ มีการกำหนดค่ามากมายที่คุณต้องดูแล
Evan Hu

2
เสื้อเจอร์ซี่ก็เป็นทางเลือกที่ดีเช่นกันหากคุณใช้ (หรือคุณต้องการใช้) สปริงบูต เอกสาร
herau

1
คุณสามารถใช้ไลบรารีGoogle GSONสำหรับการมาร์แชลและ unmarshaling สนับสนุน Java generics และวัตถุที่กำหนดเอง
Tejzeratul
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.