Printing more debugging information to help track an invalid JsonAdapter. (#1068)
Now the thrown exception carries this information: java.lang.IllegalArgumentException: Invalid attempt to bind an instance of java.lang.Integer as a @JsonAdapter for com.google.gson.functional.JsonAdapterAnnotationOnClassesTest$D. @JsonAdapter value must be a TypeAdapter, TypeAdapterFactory, JsonSerializer or JsonDeserializer.
This commit is contained in:
parent
9a2421997e
commit
5412f21431
@ -136,6 +136,7 @@ public final class JsonObject extends JsonElement {
|
|||||||
* Returns a set of members key values.
|
* Returns a set of members key values.
|
||||||
*
|
*
|
||||||
* @return a set of member keys as Strings
|
* @return a set of member keys as Strings
|
||||||
|
* @since 2.8.1
|
||||||
*/
|
*/
|
||||||
public Set<String> keySet() {
|
public Set<String> keySet() {
|
||||||
return members.keySet();
|
return members.keySet();
|
||||||
|
@ -68,9 +68,10 @@ public final class JsonAdapterAnnotationTypeAdapterFactory implements TypeAdapte
|
|||||||
: null;
|
: null;
|
||||||
typeAdapter = new TreeTypeAdapter(serializer, deserializer, gson, type, null);
|
typeAdapter = new TreeTypeAdapter(serializer, deserializer, gson, type, null);
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException("Invalid attempt to bind an instance of "
|
||||||
"@JsonAdapter value must be TypeAdapter, TypeAdapterFactory, "
|
+ instance.getClass().getName() + " as a @JsonAdapter for " + type.toString()
|
||||||
+ "JsonSerializer or JsonDeserializer reference.");
|
+ ". @JsonAdapter value must be a TypeAdapter, TypeAdapterFactory,"
|
||||||
|
+ " JsonSerializer or JsonDeserializer.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeAdapter != null && annotation.nullSafe()) {
|
if (typeAdapter != null && annotation.nullSafe()) {
|
||||||
|
@ -249,4 +249,15 @@ public final class JsonAdapterAnnotationOnClassesTest extends TestCase {
|
|||||||
return Foo.valueOf(in.nextString().toUpperCase(Locale.US));
|
return Foo.valueOf(in.nextString().toUpperCase(Locale.US));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testIncorrectJsonAdapterType() {
|
||||||
|
try {
|
||||||
|
new Gson().toJson(new D());
|
||||||
|
fail();
|
||||||
|
} catch (IllegalArgumentException expected) {}
|
||||||
|
}
|
||||||
|
@JsonAdapter(Integer.class)
|
||||||
|
private static final class D {
|
||||||
|
@SuppressWarnings("unused") final String value = "a";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user