Top Posts

Destaque na FNAC Guia do Exame SCJP

Continue lendo

Jersey com JSON em 5min

Posted by camilolopes | Posted in Java | Posted on 21-10-2013

3

 

Olá Pessoal,

O post de hoje tem como objetivo ensinar como retornar um objeto JSON usando Jersey em 5min. Então acredito que você já sabe o que é Jersey e o que é um objeto JSON, certo? Vou pular toda a teoria e ir direto para prática.

Lets go…

Starting

  1. Crie um projeto maven webapps
  2. No pom.xml deixe assim :

<dependency>

       <groupId>com.sun.jersey</groupId>

       <artifactId>jersey-server</artifactId>

       <version>1.8</version>

    </dependency>

    <dependency>

       <groupId>com.sun.jersey</groupId>

       <artifactId>jersey-json</artifactId>

       <version>1.8</version>

    </dependency>

<build>

    <finalName>hellojersey</finalName>

  </build>

 

Em src/main/java crie um package  e uma classe:

 

jerseypackage

HelloJerseyService.java

É a classe que terá o serviço, veja:

@Path(“/hello”)

public class HelloJerseyService {

       @GET

       @Path(“/client”)

       @Produces(MediaType.APPLICATION_JSON)

       public Client getCliente() {

             Client client = new Client();

             client.setName(“Hello World Camilo”);

             return client;

       }

}

 

@Path – aqui estamos dizendo que caminho seguir para acessar esse serviço. E para obter um cliente é através do /client sendo a url completa assim /hello/client

Crie a classe Client.java

public class Client {

       private String name; 

       public String getName() {

             return name;

       } 

       public void setName(String name) {

             this.name = name;

       }      

}

 

Abra o arquivo web.xml, pois precisamos dizer que vamos usar o Jersey e fazer umas configurações, portanto crie o servlet a seguir:

<servlet>

  <servlet-name>jersey-servlet</servlet-name>

  <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

  <init-param>

   <param-name>com.sun.jersey.config.property.packages</param-name>

   <param-value>com.camilolopes.jersey.services</param-value>

  </init-param>

  <init-param>

   <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>

   <param-value>true</param-value>

  </init-param>

 </servlet>

 

No primeiro init-param estamos dizendo onde está o package com a classe de serviço para o Jersey.  No segundo estamos dizendo: “pode ser retornado um objeto JSON”. E aqui:

<servlet-mapping>

  <servlet-name>jersey-servlet</servlet-name>

  <url-pattern>/rest/*</url-pattern>

 </servlet-mapping>

Estamos configurando o mapping para acessar essa parte da aplicação, ou seja, será:

http://localhost:8080/hellojersey/rest/hello/client

Testando:

Execute o seguinte comando:

 maven  mvn tomcat:run

E acesse pelo browser http://localhost:8080/hellojersey/rest/hello/client

jerseyhelloworld

 

 Simples não? Vou ficando por aqui.

See ya!!

Abraços.

Usando Spring Core com múltiplos projects

Posted by camilolopes | Posted in Java, Spring | Posted on 14-10-2013

0

Olá Pessoal,

O post hoje é bem rápido e a ideia é compartilhar com vocês um problema comum quando temos mais de um projeto com dependência e precisamos usar o applicationContext que está em outro projeto.  São coisas que a gente não decora e que normalmente faz uma vez a cada novo projeto e que certamente esquecemos com o passar do tempo. E se algum livro fala sobre o assunto, certamente nem damos atenção à esse detalhe, pois estamos ansiosos em querer meter a mão na massa.

lets go…

 

Contexto

Recentemente tive que criar um projeto com module do maven. Veja a estrutura para ficar mais claro: 

—parent

—core

—web

–dependecy of core

 

Com o desenho simples acima estou dizendo que tenho um projeto parent (pai) que tem dois filhos: core e web. E o filho web depende do projeto core. 

No projeto core temos o back-end da aplicação, ou seja, regras de negócio e persistência vão estar nesse projeto. O projeto web vai cuidar do front-end. É nele que teremos o controller, os arquivos .html, xhtml, jsp, js etc. 

Então na prática o projeto web tem um .jar do projeto core: 

<dependency>

<groupId>com.handson.core</groupId>

<artifactId>xxx-core</artifactId>

<version>1.0.0</version>

</dependency>

 

Até aqui tudo bem. Nenhum problema, certo? 

Como falei, o projeto core tem o applicationContext do Spring, já que é lá que fazemos IoC, dizemos para o spring cuidar da sessionFactory etc. 

E qual o problema?

Quando precisamos usar o ApplicationContext no web. Esse é o problema. O código a seguir não vai funcionar quando aplicação subir:

 

 @Controller

@Path(“/user”)

public class UserController {

@Autowired

@Qualifier(“userServiceImpl”)

private UserService userService;

//código omitido

}

 

Por que não vai funcionar? Porque o applicationContext está dentro de .jar de outro projeto e ao subir a aplicação precisamos dizer isso para web.xml. Uma forma simples  é criar um arquivo applicationContext em web e importar o que temos no applicationContext no projeto core. Portanto, crie um app-context.xml em resource do projeto web:

 

springprojectwebresource

E no arquivo app-context que está no projeto web, faça isso:

<beans xmlns=”http://www.springframework.org/schema/beans”

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=”http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd”> 

<import resource=”classpath*:/META-INF/app-context.xml”/>

</beans> 

Esse caminho acima é porque o arquivo no projeto core está assim:

springappcontextcore

 

Agora no arquivo web.xml no projeto xx-web deixe assim:

 springwebxml

Assim, ao subir a aplicação o arquivo que está dentro do .jar do projeto core será carregado. E no import que fizemos anteriormente dizemos para importar esse arquivo para o contexto da aplicação web que está sendo carregada. 

Pronto. Salve as alterações e execute mvn install. Suba a aplicação. Se o Spring não conseguir fazer o @Autowired ele irá reclamar logo que subir. Mas o esperado é que não tenha problemas. 

Abraços! Vou ficando por aqui. Espero que tenham gostado da dica de hoje.