Integrando sua aplicação Spring com WebService JAX-RS RESTful e Jersey
Neste post irei mostrar as alterações que você precisa fazer para sua aplicação que já deve estar funcionando com Spring, ser integrada com JAX-RS, que é uma especificação (a JSR-311) que define a criação de um WebService com arquitetura RESTful, utilizando anotações que diminuem a necessidade de muitas configurações, utilizaremos a implementação Jersey que é open source e referência do JAX-RS.
Se quer saber mais sobre WebService RESTful você pode encontrar uma boa introdução no site da K19.
No caso da minha aplicação estou utilizando Spring 2.5, Hibernate 3.3.2 e JSF 1.2. Caso seu Spring seja de uma versão diferente pode ser que não funcione da mesma forma.
Os jars adicionais que você precisa colocar em sua aplicação são: cglib-nodep-2.1_3.jar, jersey-core-1.5.jar, jersey-json-1.5.jar, jersey-server-1.5.jar, jersey-spring-1.5.jar, json-lib-2.4-jdk15.jar.
No seu arquivo web.xml adicione as seguintes linhas:
<web-app version="2.5">
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Rest_Servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
...
</web-app>
No seu applicationContext.xml adicione:
<!-- Coloque em base-package o pacote da sua classe de Serviço -->
<context:component-scan base-package="br.com.fred.exemplo.servico" />
A sua classe de serviço deve ficar como:
@Path("/livros")
@Component
Se quer saber mais sobre WebService RESTful você pode encontrar uma boa introdução no site da K19.
No caso da minha aplicação estou utilizando Spring 2.5, Hibernate 3.3.2 e JSF 1.2. Caso seu Spring seja de uma versão diferente pode ser que não funcione da mesma forma.
Os jars adicionais que você precisa colocar em sua aplicação são: cglib-nodep-2.1_3.jar, jersey-core-1.5.jar, jersey-json-1.5.jar, jersey-server-1.5.jar, jersey-spring-1.5.jar, json-lib-2.4-jdk15.jar.
No seu arquivo web.xml adicione as seguintes linhas:
<web-app version="2.5">
...
<!-- Jersey servlet -->
<!-- Jersey servlet -->
<servlet>
<servlet-name>Rest_Servlet</servlet-name><servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Rest_Servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
...
</web-app>
No seu applicationContext.xml adicione:
<!-- Coloque em base-package o pacote da sua classe de Serviço -->
<context:component-scan base-package="br.com.fred.exemplo.servico" />
A sua classe de serviço deve ficar como:
@Path("/livros")
@Component
@Service
public class LivroService {
@Autowired
public class LivroService {
@Autowired
private LivroDAO livroDAO;
@GET @Produces("text/xml")
public List<Livro> getLivros( ){
//retorna uma lista de livros
//retorna uma lista de livros
return livroDao.getLivros( );
}
@GET
@Path("/id/{id}")
@Produces("text/xml")
public Livro getLivro(@PathParam("id")String id) {
Integer intId = Integer.valueOf(id);
return livroDAO.getLivro(id);
}
@Path("/id/{id}")
@Produces("text/xml")
public Livro getLivro(@PathParam("id")String id) {
Integer intId = Integer.valueOf(id);
return livroDAO.getLivro(id);
}
}
Sua classe Livro ficará como:
Sua classe Livro ficará como:
@XmlRootElement
public class Livro {
private int id;
private String titulo;
private String autor;
public Livro() {
}
//getters e setters
}
Agora basta executar seu projeto e testar, supondo que o nome do projeto é biblioteca e que você está usando o tomcat na porta 8080, basta testar das seguintes formas:
http://localhost:8080/biblioteca/livros (retorna xml com uma lista de livros)
http://localhost:8080/biblioteca/livros/id (retorna xml com um livro com o id especificado)
Qualquer dúvida, deixe nos comentários.
Frederico Maia Arantes
Analista e Desenvolvedor de Sistemas Java EE
Oracle Certified Professional, Java SE 6 Programmer
Twitter
Comentários
Postar um comentário