diff --git a/adapters/src/main/java/com/squareup/moshi/adapters/PolymorphicJsonAdapterFactory.java b/adapters/src/main/java/com/squareup/moshi/adapters/PolymorphicJsonAdapterFactory.java index 27527a3..88cb8c5 100644 --- a/adapters/src/main/java/com/squareup/moshi/adapters/PolymorphicJsonAdapterFactory.java +++ b/adapters/src/main/java/com/squareup/moshi/adapters/PolymorphicJsonAdapterFactory.java @@ -275,6 +275,9 @@ public final class PolymorphicJsonAdapterFactory implements JsonAdapter.Facto } @Override public void toJson(JsonWriter writer, Object value) throws IOException { + if (defaultValueSet && value == defaultValue) { + throw new IllegalArgumentException("Cannot serialize default value instance: " + value); + } Class type = value.getClass(); int labelIndex = subtypes.indexOf(type); if (labelIndex == -1) { diff --git a/adapters/src/test/java/com/squareup/moshi/adapters/PolymorphicJsonAdapterFactoryTest.java b/adapters/src/test/java/com/squareup/moshi/adapters/PolymorphicJsonAdapterFactoryTest.java index ffc479e..37a3b1c 100644 --- a/adapters/src/test/java/com/squareup/moshi/adapters/PolymorphicJsonAdapterFactoryTest.java +++ b/adapters/src/test/java/com/squareup/moshi/adapters/PolymorphicJsonAdapterFactoryTest.java @@ -105,6 +105,24 @@ public final class PolymorphicJsonAdapterFactoryTest { assertThat(message).isNull(); } + @Test public void toJsonDefaultValue() { + Error fallbackError = new Error(Collections.emptyMap()); + Moshi moshi = new Moshi.Builder() + .add(PolymorphicJsonAdapterFactory.of(Message.class, "type") + .withSubtype(Success.class, "success") + .withSubtype(Error.class, "error") + .withDefaultValue(fallbackError)) + .build(); + JsonAdapter adapter = moshi.adapter(Message.class); + + try { + String json = adapter.toJson(fallbackError); + fail(); + } catch (IllegalArgumentException e) { + assertThat(e).hasMessageContaining("Cannot serialize default value instance"); + } + } + @Test public void unregisteredSubtype() { Moshi moshi = new Moshi.Builder() .add(PolymorphicJsonAdapterFactory.of(Message.class, "type")