0.8.0
Pre-release
Pre-release
-
New: Experimental support for Java
recordclasses via newmoshi-records-reflectartifact. See
RecordsJsonAdapterFactory. Requires JDK 15 +--enable-preview.Moshi moshi = new Moshi.Builder() .add(new RecordsJsonAdapterFactory()) .build(); final record Message(String value) { }
-
New: Experimental support for Java
sealedclasses and interfaces in moshi-sealed via new
moshi-sealed-java-sealed-reflectartifact. SeeJavaSealedJsonAdapterFactory. Requires JDK 15 +--enable-preview.Moshi moshi = new Moshi.Builder() .add(new JavaSealedJsonAdapterFactory()) .add(new RecordsJsonAdapterFactory()) .build(); @JsonClass(generateAdapter = true, generator = "sealed:type") sealed interface MessageInterface permits MessageInterface.Success, MessageInterface.Error { @TypeLabel(label = "success", alternateLabels = {"successful"}) final record Success(String value) implements MessageInterface { } @TypeLabel(label = "error") final record Error(Map<String, Object> error_logs) implements MessageInterface { } }
-
New:
@AdaptedByannotation support inmoshi-adapters. This is analogous to Gson's@JsonAdapterannotation,
allowing you to annotate a class or a property with it to indicate whichJsonAdapterorJsonAdapter.Factory
should be used to encode it.
val moshi = Moshi.Builder()
.add(AdaptedBy.Factory())
.build()
@AdaptedBy(StringAliasAdapter::class)
data class StringAlias(val value: String)
class StringAliasAdapter : JsonAdapter<StringAlias>() {
override fun fromJson(reader: JsonReader): StringAlias? {
return StringAlias(reader.nextString())
}
override fun toJson(writer: JsonWriter, value: StringAlias?) {
if (value == null) {
writer.nullValue()
return
}
writer.value(value.value)
}
}