Com a febre do "two way databind" do Angularjs o beck-end do Java precisa receber um arquivo ou um objeto JSON e transformar em um objeto Java para a camada de negócio. O objetivo do post é converter um JSON em objeto ou um objeto em JSON fazendo uma leitura ou escrita do arquivo ou do objeto JSON. O nome do processo de conversão de JSON para objeto é na verdade Marshal e o inverso Unmarshal.
Vamos criar no Eclipse um novo Projeto em File>>New>>Other>>Dinamyc Web Project com o nome de JaxonTest.
Next>>Next>> Clica em generate web.xml e fnaliza.
Com o botão direito do mouse sobre o projeto clicar em Configure>>Convert to Maven Project.
Vai ser criado o arquivo pom.xml e vamos adicionar as dependencias dentro da tag <dependecies>.
Agora basta clicar em Maven>>Update Project e as dependências serão baixadas automaticamente e poderão ser visualizadas dentro de Java Rersources>>Libraries>>Maven Dependencies.
Vamos criar tres pacotes agora model, read e write.
Vamos criar em model o arquivo User.java com três variáveis, getters and setters e contrutores:
Vamos criar o primeiro exemplo em write.
Neste exemplo utilizamos ObjectMapper() para a criação do arquivo, o objeto user é criado e enviado para o diretório determinado. Segue a saida do console em JSON:
{"nome":"Marcelo","age":30,"messages":["mensagem1","mensagem2"]}
{
"nome" : "Marcelo",
"age" : 30,
"messages" : [ "mensagem1", "mensagem2" ]
}
Agora vamos ler o arquivo criado utilizando o mesmo formato no Exemplo2.java no pacote read.
No Exemplo3 vamos receber o objeto em um objeto do tipo Object() que pode ser qualquer tipo de objeto.
Vamos criar no Eclipse um novo Projeto em File>>New>>Other>>Dinamyc Web Project com o nome de JaxonTest.
Next>>Next>> Clica em generate web.xml e fnaliza.
Com o botão direito do mouse sobre o projeto clicar em Configure>>Convert to Maven Project.
Vai ser criado o arquivo pom.xml e vamos adicionar as dependencias dentro da tag <dependecies>.
- <dependencies>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-annotations</artifactId>
- <version>2.6.3</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-core</artifactId>
- <version>2.6.3</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <version>2.6.3</version>
- </dependency>
- <dependency>
- <groupId>org.codehaus.jackson</groupId>
- <artifactId>jackson-mapper-asl</artifactId>
- <version>1.9.13</version>
- </dependency>
- </dependencies>
Agora basta clicar em Maven>>Update Project e as dependências serão baixadas automaticamente e poderão ser visualizadas dentro de Java Rersources>>Libraries>>Maven Dependencies.
Vamos criar tres pacotes agora model, read e write.
Vamos criar em model o arquivo User.java com três variáveis, getters and setters e contrutores:
- package br.marcelo.model;
- import java.util.List;
- public class User {
- private String nome;
- private int age;
- private List<String> messages;
- public User() {
- super();
- // TODO Auto-generated constructor stub
- }
- public User(String nome, int age, List<String> messages) {
- super();
- this.nome = nome;
- this.age = age;
- this.messages = messages;
- }
- public String getNome() {
- return nome;
- }
- public void setNome(String nome) {
- this.nome = nome;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public List<String> getMessages() {
- return messages;
- }
- public void setMessages(List<String> messages) {
- this.messages = messages;
- }
- }
Vamos criar o primeiro exemplo em write.
- package br.marcelo.write;
- import java.io.File;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import org.codehaus.jackson.JsonGenerationException;
- import org.codehaus.jackson.map.JsonMappingException;
- import org.codehaus.jackson.map.ObjectMapper;
- import br.marcelo.model.User;
- public class Exemplo1 {
- public static void main(String[] args) {
- ObjectMapper mapper = new ObjectMapper();
- String curDir;
- //For testing
- User user = new User();
- user.setNome("Marcelo");
- user.setAge(30);
- List<String> messages = new ArrayList<>();
- messages.add("mensagem1");
- messages.add("mensagem2");
- user.setMessages(messages);
- try {
- //Get current Directory
- curDir = System.getProperty("user.dir");
- //Convert object to JSON string and save into file directly
- mapper.writeValue(new File(curDir+"\\user.json"), user);
- System.out.println("Arquivo localizado em: "+curDir+"\\user.json");
- //Convert object to JSON string
- String jsonInString = mapper.writeValueAsString(user);
- System.out.println(jsonInString);
- //Convert object to JSON string and pretty print
- jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);
- System.out.println(jsonInString);
- } catch (JsonGenerationException e) {
- e.printStackTrace();
- } catch (JsonMappingException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
Neste exemplo utilizamos ObjectMapper() para a criação do arquivo, o objeto user é criado e enviado para o diretório determinado. Segue a saida do console em JSON:
{"nome":"Marcelo","age":30,"messages":["mensagem1","mensagem2"]}
{
"nome" : "Marcelo",
"age" : 30,
"messages" : [ "mensagem1", "mensagem2" ]
}
Agora vamos ler o arquivo criado utilizando o mesmo formato no Exemplo2.java no pacote read.
- package br.marcelo.read;
- import java.io.File;
- import java.io.IOException;
- import com.fasterxml.jackson.core.JsonGenerationException;
- import com.fasterxml.jackson.databind.JsonMappingException;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import br.marcelo.model.User;
- public class Exemplo2 {
- public static void main(String[] args) {
- Exemplo2 obj = new Exemplo2();
- obj.run();
- }
- private void run() {
- ObjectMapper mapper = new ObjectMapper();
- String curDir;
- try {
- //Get current Directory
- curDir = System.getProperty("user.dir");
- // Convert JSON string from file to Object
- User user = mapper.readValue(new File(curDir+"\\user.json"), User.class);
- System.out.println(user);
- //Pretty print
- String prettyStaff1 = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);
- System.out.println(prettyStaff1);
- } catch (JsonGenerationException e) {
- e.printStackTrace();
- } catch (JsonMappingException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
No Exemplo3 vamos receber o objeto em um objeto do tipo Object() que pode ser qualquer tipo de objeto.
- package br.marcelo.read;
- import java.io.File;
- import java.io.IOException;
- import com.fasterxml.jackson.core.JsonGenerationException;
- import com.fasterxml.jackson.databind.JsonMappingException;
- import com.fasterxml.jackson.databind.ObjectMapper;
- public class Exemplo3 {
- public static void main(String[] args) {
- Exemplo3 obj = new Exemplo3();
- obj.run();
- }
- private void run() {
- ObjectMapper mapper = new ObjectMapper();
- String curDir;
- try {
- // Get current Directory
- curDir = System.getProperty("user.dir");
- // Convert JSON string from file to Object
- Object object = mapper.readValue(new File(curDir + "\\user.json"), Object.class);
- System.out.println(object);
- //System.out.println(object.getClass().getName());
- // Pretty print
- String prettyStaff1 = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(object);
- System.out.println(prettyStaff1);
- } catch (JsonGenerationException e) {
- e.printStackTrace();
- } catch (JsonMappingException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
Para o próximo exemplo vamos adicionar ao arquivo pom.xml uma nova dependência:
- <dependency>
- <groupId>com.googlecode.json-simple</groupId>
- <artifactId>json-simple</artifactId>
- <version>1.1.1</version>
- </dependency>
Vamos atualizar novamente o projeto em Maven>>Update Project e a nova dependência poderá ser visualizada nas Libraries.
No Exemplo4.java o objeto é recebido em um objeto do tipo JSONObject.
- package br.marcelo.read;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.IOException;
- import java.util.Iterator;
- import java.util.List;
- import org.json.simple.JSONObject;
- import org.json.simple.parser.JSONParser;
- import org.json.simple.parser.ParseException;
- public class Exemplo4 {
- public static void main(String[] args) {
- JSONObject jsonObject;
- //Cria o parse de tratamento
- JSONParser parser = new JSONParser();
- //Variaveis que irao armazenar os dados do arquivo JSON
- String nome;
- Long age;
- List<String> messages;
- String curDir;
- try {
- // Get current Directory
- curDir = System.getProperty("user.dir");
- //Salva no objeto JSONObject o que o parse tratou do arquivo
- jsonObject = (JSONObject) parser.parse(new FileReader(
- curDir + "\\user.json"));
- /*//Salva nas variaveis os dados retirados do arquivo
- name = (String) jsonObject.get("nome");
- age = (Long) jsonObject.get("age");
- messages = (List<String>) jsonObject.get("messages");*/
- for (Iterator it = jsonObject.keySet().iterator(); it.hasNext();) {
- Object key = it.next();
- Object item = jsonObject.get(key);
- System.out.println(key+":"+item);
- }
- }
- //Trata as exceptions que podem ser lançadas no decorrer do processo
- catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (ParseException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
Referencias:
http://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/
http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/
http://stackoverflow.com/questions/18429468/correct-set-of-dependencies-for-using-jackson-mapper
Nenhum comentário:
Postar um comentário