0.8.0
Pre-release
Pre-release
-
New: Experimental support for Java
record
classes via newmoshi-records-reflect
artifact. 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
sealed
classes and interfaces in moshi-sealed via new
moshi-sealed-java-sealed-reflect
artifact. 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:
@AdaptedBy
annotation support inmoshi-adapters
. This is analogous to Gson's@JsonAdapter
annotation,
allowing you to annotate a class or a property with it to indicate whichJsonAdapter
orJsonAdapter.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)
}
}