-
Notifications
You must be signed in to change notification settings - Fork 4.3k
Closed
Labels
Description
When calling Gson.toJson(..., Appendable)
and Appendable
is not an instance of Writer
, then Gson
creates a CharSequence
which does not fulfill the toString()
requirements:
Returns a string containing the characters in this sequence in the same order as this sequence. The length of the string will be the length of this sequence.
Contrived example:
static class MyAppendable implements Appendable {
private final StringBuilder stringBuilder = new StringBuilder();
@Override
public Appendable append(char c) throws IOException {
stringBuilder.append(c);
return this;
}
@Override
public Appendable append(CharSequence csq) throws IOException {
if (csq == null) {
append("null");
} else {
append(csq, 0, csq.length());
}
return this;
}
public Appendable append(CharSequence csq, int start, int end) throws IOException {
if (csq == null) {
csq == "null";
}
// According to doc, toString() must return string representation
String s = csq.toString();
stringBuilder.append(s, start, end);
return this;
}
}
public static void main(String[] args) {
MyAppendable myAppendable = new MyAppendable();
new Gson().toJson("test", myAppendable);
// Prints `com.` (first 4 chars of `com.google.gson.internal.Streams.AppendableWriter.CurrentWrite`)
System.out.println(myAppendable.stringBuilder);
}