Skip to content

Type field is generated twice with JsonApiAdapter and PolymorphicAdapter #107

@pueffl

Description

@pueffl

I'm trying to generate JsonApi for an application in Kotlin and have the following adapters:

val jsonApiAdapterFactory: JsonAdapter.Factory =
ResourceAdapterFactory.builder()
.add(MessageModel::class.java)
.add(MultipartModel::class.java)
.add(BodypartModel::class.java)
.add(SingleBodyModel::class.java)
.build()

val moshi = Moshi.Builder()
        .add(jsonApiAdapterFactory)
        .add(PolymorphicJsonAdapterFactory.of(Body::class.java, "type")
                .withSubtype(MultipartModel::class.java, "multipart")
                .withSubtype(SingleBodyModel::class.java, "singlebody")
                .withSubtype(MessageModel::class.java, "message"))
        .add(PolymorphicJsonAdapterFactory.of(Part::class.java, "type")
                .withSubtype(BodypartModel::class.java, "bodypart")
                .withSubtype(MessageModel::class.java, "message"))
        .add(KotlinJsonAdapterFactory())
        .build()

@jsonapi(type = "message")
MessageModel {...}
and
@jsonapi(type = "bodypart")
BodypartModel {...} are implementing interface Part:

interface Part {
var content: Body?
}

where content is overridden the following way:
@ignore override var content: Body? = null

When I serialize the models, the field 'type' is generated twice. I could change the @jsonapi(type = "...") annotation to something else, so I see 2 'type' fields with two different values, it is generated from the JsonApi-Adapter and the Polymorpic Adapter, but I need both.

Maybe I am wrong and this can be solved in some way, but as far as I can see, the type-parameter in @jsonapi(type = "bodypart") should not be obligatory, as it is sometimes wrong to generate it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions