SHARE
TWEET

JSONApiPersonaRESTClientWeb/PersonsReader.java

apuntesdejava Jun 8th, 2013 2,904 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. @Provider
  2. @Consumes(MediaType.APPLICATION_JSON)
  3. public class PersonsReader implements MessageBodyReader<List<Person>> {
  4.  
  5.     static final Logger LOGGER = Logger.getLogger(PersonsReader.class.getName());
  6.  
  7.     @Override
  8.     public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
  9.         return List.class.isAssignableFrom(type);
  10.     }
  11.  
  12.     @Override
  13.     public List<Person> readFrom(Class<List<Person>> type,
  14.             Type genericType,
  15.             Annotation[] annotations,
  16.             MediaType mediaType,
  17.             MultivaluedMap<String, String> httpHeaders,
  18.             InputStream entityStream) throws IOException, WebApplicationException {
  19.  
  20.         List<Person> lista = new ArrayList<>(); //creo mi contenedor de objetos
  21.         Person p = null; //sera mi contenedor por elemento del arreglo
  22.         JsonParser parser = Json.createParser(entityStream); //creo mi procesador JSON desde el Stream
  23.         while (parser.hasNext()) { //... recorro el stream  buscando sus elementos
  24.             JsonParser.Event parserNext = parser.next();
  25.             LOGGER.log(Level.INFO, "parser.next:{0}", parserNext);
  26.             switch (parserNext) {
  27.                 case START_OBJECT: //si es el comienzo de un objeto
  28.                     p = new Person(); //creo un elemento del arreglo, y guardare todo alli
  29.                     break;
  30.                 case KEY_NAME: //si es un nombre de atributo..
  31.                     if (p == null) //...pero aun no se ha instanciado un objeto temporal
  32.                     {
  33.                         break;  // ... termino
  34.                 }
  35.                     String key = parser.getString(); //.. sino, obtengo el nombre lo obtengo
  36.                     parser.next(); //... paso al sigueinte elemento
  37.                     switch (key) { //... y dependiendo del nombre del atributo
  38.                         case "nombre":
  39.                             p.setName(parser.getString()); //... pongo el valor en el bean
  40.                             break;
  41.                         case "id":
  42.                             p.setPersonaId(parser.getInt());
  43.                             break;
  44.                         case "sexo":
  45.                             p.setGender(parser.getString());
  46.                             break;
  47.                     }
  48.  
  49.                     break;
  50.                 case END_OBJECT: // si termina un objeto
  51.                     if (p != null) { //.. y se habia creado un objeto..
  52.                     lista.add(p); // el elemento llenado, lo agrego a la lista
  53.                     p = null; //.. e inicializo la variable temporal en NULL
  54.                 }
  55.                     break;
  56.  
  57.             }
  58.         }
  59.         return lista;
  60.     }
  61.  
  62. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top