18

Serialization does not happen properly when I use @Json in the fields but it started working after changing to @field:Json.

I came through this change after reading some bug thread and I think this is specific to kotlin. I would like to know what difference does @field:Json bring and is it really specific to kotlin?

Jegan Babu
  • 1,286
  • 1
  • 15
  • 19

1 Answers1

9

Whatever you put between @ and : in your annotation specifies the exact target for your Annotation.

When using Kotlin with JVM there is a substantial number of things generated, therefore your Annotation could be put in many places. If you don't specify a target you're letting the Kotlin compiler choose where the Annotation should be put. When you specify the target -> you're in charge.

To better see the difference you should inspect the decompiled Java code of the Kotlin Bytecode in IntelliJ/Android Studio.


Example kotlin code:

class Example {

    @ExampleAnnotation
    val a: String = TODO()

    @get:ExampleAnnotation
    val b: String = TODO()

    @field:ExampleAnnotation
    val c: String = TODO()
}

Decompiled Java code:

public final class Example {
   @NotNull
   private final String a;
   @NotNull
   private final String b;
   @ExampleAnnotation
   @NotNull
   private final String c;

   /** @deprecated */
   // $FF: synthetic method
   @ExampleAnnotation
   public static void a$annotations() {
   }

   @NotNull
   public final String getA() {
      return this.a;
   }

   @ExampleAnnotation
   @NotNull
   public final String getB() {
      return this.b;
   }

   @NotNull
   public final String getC() {
      return this.c;
   }

   public Example() {
      boolean var1 = false;
      throw (Throwable)(new NotImplementedError((String)null, 1, (DefaultConstructorMarker)null));
   }
}

For more info go to Kotlin docs.

Bartek Lipinski
  • 30,698
  • 10
  • 94
  • 132
  • 6
    More information about how it impacts Moshi would have been nicer since the question is Moshi specific and not a difference between the annotations themselves. But it helps, thanks :) – Ashu Jul 08 '21 at 13:50