Skip to content

0.8.0

Pre-release
Pre-release
Compare
Choose a tag to compare
@ZacSweers ZacSweers released this 27 Jan 06:28
· 627 commits to main since this release
2f7368c
  • New: Experimental support for Java record classes via new moshi-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. See JavaSealedJsonAdapterFactory. 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 in moshi-adapters. This is analogous to Gson's @JsonAdapter annotation,
    allowing you to annotate a class or a property with it to indicate which JsonAdapter or JsonAdapter.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)
   }
 }