Могу ли я применить Moshi @JsonQualifier к параметру типа? - PullRequest
0 голосов
/ 28 октября 2019

Мне нужно определить JsonAdapter для BigDecimal с помощью аннотации JsonQualifier и использовать его для элементов списка.

@JsonQualifier
@Target(AnnotationTarget.TYPE)
@Retention(AnnotationRetention.RUNTIME)
annotation class JsonCoordinates
@JsonClass(generateAdapter = true)
data class LocationData(
        val coordinates: List<@JvmSuppressWildcards @JsonCoordinates BigDecimal>
)
class LocationDataAdapterTest {

    @Test
    fun toJsonWithQualifier() {
        val moshi: Moshi
        val adapter: JsonAdapter<LocationData>

        moshi = Moshi.Builder()
                .add(BigDecimal::class.java, JsonCoordinates::class.java,
                        DecimalAdapter())
                .build()
        adapter = moshi.adapter(LocationData::class.java)

        val data = LocationData(listOf(BigDecimal(10), BigDecimal(20)))
        assertEquals("{\"coordinates\":[\"10\",\"20\"]}", adapter.toJson(data))
    }

    @Test
    fun toJsonWithoutQualifier() {
        val moshi: Moshi
        val adapter: JsonAdapter<LocationData>

        moshi = Moshi.Builder()
                .add(BigDecimal::class.java, DecimalAdapter())
                .build()
        adapter = moshi.adapter(LocationData::class.java)

        val data = LocationData(listOf(BigDecimal(10), BigDecimal(20)))
        assertEquals("{\"coordinates\":[\"10\",\"20\"]}", adapter.toJson(data))
    }
}

Тест toJsonWithoutQualifier имеет успехТест toJsonWithQualifier не пройден со следующим исключением:

java.lang.IllegalArgumentException: Platform class java.math.BigDecimal (with no annotations) requires explicit JsonAdapter to be registered
for class java.math.BigDecimal
for java.util.List<java.math.BigDecimal> coordinates
for class app.klosed.api.model.LocationData

Вот полный код https://gist.github.com/dscoppelletti/a5937124e1b33e5e33771b7845b2ed9a

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...