Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Provider
- @Consumes(MediaType.APPLICATION_JSON)
- public class PersonsReader implements MessageBodyReader<List<Person>> {
- static final Logger LOGGER = Logger.getLogger(PersonsReader.class.getName());
- @Override
- public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
- return List.class.isAssignableFrom(type);
- }
- @Override
- public List<Person> readFrom(Class<List<Person>> type,
- Type genericType,
- Annotation[] annotations,
- MediaType mediaType,
- MultivaluedMap<String, String> httpHeaders,
- InputStream entityStream) throws IOException, WebApplicationException {
- List<Person> lista = new ArrayList<>(); //creo mi contenedor de objetos
- Person p = null; //sera mi contenedor por elemento del arreglo
- JsonParser parser = Json.createParser(entityStream); //creo mi procesador JSON desde el Stream
- while (parser.hasNext()) { //... recorro el stream buscando sus elementos
- JsonParser.Event parserNext = parser.next();
- LOGGER.log(Level.INFO, "parser.next:{0}", parserNext);
- switch (parserNext) {
- case START_OBJECT: //si es el comienzo de un objeto
- p = new Person(); //creo un elemento del arreglo, y guardare todo alli
- break;
- case KEY_NAME: //si es un nombre de atributo..
- if (p == null) //...pero aun no se ha instanciado un objeto temporal
- {
- break; // ... termino
- }
- String key = parser.getString(); //.. sino, obtengo el nombre lo obtengo
- parser.next(); //... paso al sigueinte elemento
- switch (key) { //... y dependiendo del nombre del atributo
- case "nombre":
- p.setName(parser.getString()); //... pongo el valor en el bean
- break;
- case "id":
- p.setPersonaId(parser.getInt());
- break;
- case "sexo":
- p.setGender(parser.getString());
- break;
- }
- break;
- case END_OBJECT: // si termina un objeto
- if (p != null) { //.. y se habia creado un objeto..
- lista.add(p); // el elemento llenado, lo agrego a la lista
- p = null; //.. e inicializo la variable temporal en NULL
- }
- break;
- }
- }
- return lista;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement