@Provider
@Produces(MediaType.APPLICATION_JSON)
public class PersonWriter implements MessageBodyWriter<Person> {
@Override
public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
/*
* Devuelve TRUE si la clase es aplicable para convertirlo con este Interprte (Writer)
*/
return Person.class.isAssignableFrom(type); // por tanto, solo lo evaluamos con la clase
}
@Override
public long getSize(Person t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
//Este metodo es obsoleto para JAX-RS 2.0. Siempre debe devolver -1
return -1;
}
@Override
public void writeTo(Person t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException {
//Aqui ya realizamos la conversion desde el objeto a formato JSON
JsonGenerator gen = Json.createGenerator(entityStream); // creamos el generador desde el stream
gen.writeStartObject() //... creamos el objeto
.write("nombre", t.getName()) //... le colocamos las propiedades
.write("sexo", t.getGender()) //... no importa el origen...
.write("id", t.getPersonaId()) //..., con tal que le coloquemos el nombre correecto en el json
.write("trabajador", t.isWorker());
gen.writeEnd(); //... y cerramos el objeto
gen.flush(); //... terminado, cerramos el flujo y esta el json
}
}