우리는 봄 4.0.6 버전으로 새로운 애플리케이션을 만들 계획입니다. “XML”또는 “JSON”을 반환 할 수있는 컨트롤러를 사용합니다. 이전 프로젝트에서 JAX-RS API를 사용하여 REST 지원을위한 Spring과 함께 Jersey를 성공적으로 구현했지만, 노인들의 몇 가지 기사와 제안을 읽은 후 Spring이 꽤 좋은 REST 지원을 제공한다고 말했습니다.
JAX-RS 및 Jersey를 사용하지 않고 Spring REST 지원을 사용하는 경우 나를 혼란스럽게하는 몇 가지 사항은 다음과 같습니다.
-
Spring MVC에서 마샬링과 언 마샬링은 어떻게 수행됩니까?
-
jax-rs를 사용하려면 마샬링 또는 마샬링 해제가 필요합니까?
-
마샬링과 언 마샬링이 스프링에 의해 자동으로 처리되면 xmlRootElements에 대해 어떻게 알 수 있습니까?
Spring이 REST에 대한 매우 좋은 지원을 증명한다면 여전히 혼란 스럽습니다. 왜 사람들은 여전히 Jersey for REST를 사용합니까? 자세한 내용을 알고 싶습니다.
내가 잘못된 말을했다면 무시하십시오. 예제가있는 설명이 정말 도움이됩니다.
미리 감사드립니다 !!
답변
Jersey와 Spring MVC 모두 훌륭하다고 말하고 싶습니다. 각 프로젝트에는 고유 한 스타일과 강점이 있습니다. 어쨌든 Stack Overflow는 주관적인 비교를 요청하기에 적합한 장소가 아닙니다 (귀하의 질문은 매우 빨리 닫힐 것입니다). 이미 다른 모든 작업에 Spring을 사용하고 있고 JAX-RS를 사용할 필요 가 없다면 Spring MVC가 완전히 의미가 있습니다.
(un) marshalling과 같은 기능과 관련하여 JAX-RS는 결국 사양 일뿐입니다. 다른 라이브러리는 동일한 API를 구현하지 않고도 유사한 기능을 제공 할 수 있습니다.
-
MessageBodyReaders / Writers 대신 Spring MVC는 HttpMessageConverters 를 사용하여 REST 리소스를 마샬링 해제합니다. Spring MVC는 콘텐츠 협상을 처리하고 작업에 가장 적합한 변환기를 선택합니다 (메소드가 생성 / 소비하는 미디어 유형을 힌트하는 방법에 주석을 달 수 있음).
-
아니요, 리소스를 (un) 마샬링하기 위해 JAX-RS를 사용할 필요는 없습니다. 실제로 JAX-RS 구현 및 Spring MVC는 타사 직렬화 라이브러리를 사용하여 작업을 수행합니다. 그래서 그것은 특정 표준에 묶여 있지 않습니다.
-
4.0.6 버전에서 Spring은 JSON 용 Jackson, XML 용 JAXB 등 많은 HttpMessageConverters를 지원 합니다. Spring 4.1.0은 더 많은 HttpMessageConverters를 추가했습니다 .
- Jackson은 이제 JSON과 XML 모두에서 사용할 수 있습니다.
- Google Protobuf
- Jackson의 대안으로 JSON 용 Gson
마지막 요점에 대한 대답 @XmlRootElement
은 JAXB 주석이며 JAX-RS의 일부가 아닙니다. Spring은 JAXB를 지원합니다 .
Spring에서 REST를 사용한보다 완전한 예제는 이 시작 안내서를 확인하십시오 (10-15 분 안에 실행되는 완전한 예제를 얻을 수 있음).
다시 한 번 질문의 마지막 부분은 매우 주관적입니다. Jersey 및 Spring (Dropwizard, Play! Framework 등)뿐만 아니라 JVM에서 REST 서비스를 구축하기위한 많은 인기있는 솔루션이 있습니다.
답변
AFAIK Spring REST 지원은 Spring MVC를 기반으로하며 JAX-RS 구현이 아니라 Jersey가 JAX-RS 사양을 구현했습니다. 프로젝트에 Spring (Core, AOP 또는 MVC)이있는 사람들은 JAX-RS 구현 자보다 Spring ReST 지원을 선택합니다.
저는 Jersey를 성숙하고 JAX-RS를 구현하고 사용하기 쉽습니다.