Estoy buscando una función de biblioteca (idealmente de un marco de uso común, por ejemplo, Spring, Guava, Apache Commons, etc.) que imprima muy bien los valores de cualquier objeto Java.
Esta es una pregunta general más que específica. He visto preguntas similares en StackOverflow para las cuales una respuesta común es "implemente su propio método toString() en la clase", pero esta opción no siempre es práctica. Estoy buscando una forma general de hacer esto con cualquier objeto que encuentre, que puede tener su origen en un código de terceros. Otra sugerencia es usar RefectionToStringBuilder de Apache Commons, por ejemplo:
new ReflectionToStringBuilder(complexObject, new RecursiveToStringStyle()).toString()Pero esto tiene un uso limitado, por ejemplo, cuando se encuentra con una colección, tiende a generar algo como esto:
java.util.ArrayList@fcc7ab1[size=1] Un ejemplo de caso de uso real es registrar un Iterable<PushResult> devuelto por el método pushCommand.call() de JGit. Si publica una respuesta, asegúrese de que funcione con este y con cualquier otro objeto complejo.
Podrías probar y usar Gson. también serializa Arrays, Maps o lo que sea....
MyObject myObject = new MyObject(); Gson gson = new GsonBuilder().setPrettyPrinting().serializeNulls().create(); gson.toJson(myObject);Para el uso de deserialización:
gson.fromJson(MyObject.class);Para mapas escritos, vea esta respuesta: Gson: ¿Hay una manera más fácil de serializar un mapa?
Puede usar la clase Jackson ObjectMapper para vincular datos con json. Puedes usarlo como a continuación:
ObjectMapper mapper = new ObjectMapper();puedes guardar json en un objeto como el siguiente
Object json = mapper.readValue(input,object.class);puedes escribir eso en variable de cadena
String prettyJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(json);debería funcionar bien.