I want to write objects in human readable form in a text file, the file gets saved as a normal serialized object with unwanted characters instead.
How do I rewrite t
Two easy options:
in your code:
ReflectionToStringBuilder.toString(javabook, ToStringStyle.MULTI_LINE_STYLE);
will produce:
org.marmots.application.generator.Book@77459877[
name=Java unleashed
author=someone
nop=1032
price=450
discount=10
]
that's nice for debugging. If you have only simple fields it will be enough; if you reference another bean inside it (and another, and another...), it will print its toString() method, so you can override toString method for all your value/transfer objects with this code in order to have nice reading methods for all).
what I do usually is to extend from a base bean class:
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
public abstract class ToStringReadable {
@Override
public String toString() {
return ReflectionToStringBuilder.toString(this, ToStringStyle.MULTI_LINE_STYLE);
}
}
extending ToStringReadable will make all your beans human readable for debugging purposes.
In your code (note that you will have to publish your attributes with getter/setter(s), it's a good practice so even better):
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.writeValue(new File("target/javabook.json"), javabook);
It will produce human-readable output also, in this case JSON:
{"name":"Java unleashed","author":"someone","nop":1032,"price":450}
Using JSON approach you don't need to override toString methods as it will print all your fields but it's heavier in terms of performance, so for debugging use first method.
Hope this helps,