If I create a custom constructor, need I create one with no arguments to use with Gson?
Option 1: Yes, unless you create your own
JsonSerializer, in which case, your serializers can use whatever constructor you want.
Specifically, I would advise you to do the extra bit of work if you have other requirements in your classes, such as them being immutable, or if you want to guarantee a minimum state after initialization.
PS: actually, I supose the
JsonDeserializer is enough. Insights anyone?
Option 2: (see Eugen's answer) consider using Genson instead
Option 3: (see Robertiano's answer) keep the default deserializers and implement InstanceCreator instead