2011-07-15 21 views

Respuesta

6

XStream es extremadamente bueno en la impresión de gráficos de objetos, incluso ciclos de manejo sin ninguna configuración adicional o código adicional en sus clases (es decir, no jugar con toString() 's). Simplemente agregue la biblioteca y puede hacer esto para cualquier cosa y obtener resultados agradables y útiles:

log.debug("The object: {}", new XStream().toXML(anyObject)); 

Eso le dará salida XML. Si prefiere JSON, puede obtenerlo con un poco más de trabajo como se detalla en el XStream JSON tutorial.

0

La serialización de Java, que viene con Java, debería hacer el truco. Sin embargo, estará en formato binario.

También hay serialización XML que puede ser proporcionada por JAXB

+0

¿Cree que el formato binario es adecuado para un archivo de registro? :) – yegor256

+0

Buen punto. Acabo de agregar un enlace a JAXB. –

4

le sugiero que busque, ya sea en Apache Commons BeanUtils o Apache Commons Lang, específicamente ReflectionToStringBuilder.

0

se podía utilizar la reflexión

getClass y luego ir en cada variable de instancia y seguir adelante (algunos objetos pueden ser manejados en concreto (como cadenas))

0

Debe utilizar la reflexión. Eche un vistazo a la clase java.lang.Class, específicamente al método .getFields().

0

El java reflection API le dará acceso a todas estas cosas (los miembros privados y todo). Para obtener miembros privados, necesitará obtener yourObject.getClass().getDeclaredFields() para acceder a un campo privado, recuerde llamar al yourField.setAccesible(true) en él.

Por supuesto, rápidamente tendrá problemas manejando su propia clase para hacer esto a través de la reflexión. Los problemas principales aparecen cuando se intenta decidir finalmente imprimir un valor y determinar si se trata de una enumeración, una primitiva, una matriz primitiva, etc. Puede usar el método Class.isPrimitive para ayudar a entender ese paso. Para acceder a los elementos de una matriz, use la clase java.lang.reflect.Array.

La mejor opción, que se publicó anteriormente, es utilizar el ReflectionToStringBuilder de apache commons.

0

Un serializador json hará el trabajo, p. usando Gson:

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import com.google.gson.Gson; 

... 

private static final Logger LOG = LoggerFactory.getLogger(Your.class); 

... 

Object obj = ...; 
LOG.info(new Gson().toJson(obj)); 
Cuestiones relacionadas