Spring 4 vs Jersey para serviços da Web REST


117

Estamos planejando fazer um novo aplicativo com a versão Spring 4.0.6. Usamos controlador que pode retornar "XML" ou "JSON". No projeto anterior, implementamos com sucesso Jersey com Spring para suporte a REST usando a API JAX-RS, mas depois de ler alguns artigos e sugestões de idosos, eles disseram que a primavera está fornecendo um suporte REST muito bom.

Alguns dos pontos que realmente me confundem se eu usar o suporte Spring REST sem usar JAX-RS e Jersey são:

  1. Como o empacotamento e o desempacotamento são feitos no Spring MVC?

  2. É necessário para empacotamento ou desempacotamento necessidade de usar jax-rs.

  3. Se o empacotamento e o desempacotamento forem tratados automaticamente na primavera, como ele saberá sobre xmlRootElements.

Ainda estou confuso se o Spring é um suporte muito bom para o REST, então por que as pessoas ainda usam o Jersey para o REST? Estou realmente procurando saber mais detalhes.

Se eu disse algo errado, por favor, ignore. A explicação com o exemplo é realmente útil.

Desde já, obrigado!!

Respostas:


119

Eu diria que Jersey e Spring MVC são ótimos - cada projeto tem seu próprio estilo e pontos fortes. De qualquer forma, Stack Overflow não é o lugar certo para fazer comparações subjetivas (sua pergunta seria encerrada rapidamente). Se você já está usando Spring para todo o resto e não é obrigado a usar JAX-RS, então Spring MVC faz todo o sentido.

Com relação a recursos como (des) marshalling, JAX-RS é apenas uma especificação - outras bibliotecas podem oferecer recursos semelhantes sem implementar a mesma API.

  1. Em vez de MessageBodyReaders / Writers, Spring MVC está usando HttpMessageConverters para manipular (des) empacotar recursos REST. Spring MVC lida com a negociação de conteúdo e escolhe o melhor conversor disponível para o trabalho (você pode anotar métodos para indicar que tipo de mídia eles produzem / consomem).

  2. Não, não é necessário usar JAX-RS para (des) empacotar recursos. Na verdade, as implementações JAX-RS e Spring MVC usam bibliotecas de serialização de terceiros para fazer o trabalho; portanto, não está vinculado a um padrão específico.

  3. Em sua versão 4.0.6, Spring suporta muitos HttpMessageConverters , com Jackson para JSON, JAXB para XML e muitos outros. Spring 4.1.0 adicionou mais HttpMessageConverters :

Para responder ao seu último ponto, @XmlRootElementé uma anotação JAXB e não faz parte do JAX-RS. Spring suporta JAXB .

Para um exemplo mais completo com REST na primavera, confira este guia de introdução (você obterá um exemplo completo em execução em 10-15 minutos).

Novamente, a última parte da sua pergunta é bastante subjetiva - há muitas soluções populares para construir serviços REST no JVM, não apenas Jersey e Spring (Dropwizard, Play! Framework, etc).


2
Onde você sugere que alguém faça uma pergunta como esta?
swade de

8
"sua pergunta seria encerrada rapidamente"! Não tão rápido :)
Afshin Moazami

6
Eu adoro stackoverflow e adoro quora, nunca gostei dessa política de perguntas subjetivas de fechamento e nunca pensei em fazer perguntas técnicas em quora
Kalpesh Soni

Uma pergunta tangente: podemos ter Jersey e SpringRest no mesmo EAR, ambos funcionando juntos para diferentes conjuntos de serviços?
pramodc84

22

O suporte AFAIK Spring REST é baseado no Spring MVC e sua implementação não JAX-RS, enquanto Jersey implementou a especificação JAX-RS. Aqueles que têm Spring (Core, AOP ou MVC) em seu projeto escolhem o suporte Spring ReST ao invés do implementador JAX-RS.

Eu recomendo Jersey porque é maduro, implementa JAX-RS e é fácil de usar.


1
Obrigado pela resposta, como empacotamento e desempacotamento feito na primavera sem usar jax-rs.
Robin Saxena,

Sim, eu concordo com você. Spring Web MVC Rest não é tão fácil de usar. Existem muitas configurações que você precisa cuidar.
Evan Hu

2
Jersey também é uma boa escolha se você usar (ou quiser usar) bota Spring. cf documentation
herau

1
Você pode usar a biblioteca GSON do Google para empacotamento e desempacotamento. Suporta genéricos Java e objetos personalizados.
Tejzeratul 01 de
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.