Nedávno jsem narazil na zajímavý problém. Měl jsem dvě služby, kdy se přes REST rozhraní zavolá jedna, ta provolá druhou a vrátí výsledek. Původní odpověď vypadala takto:
data class GetAchievementsResponse(
achievements: List<AchievementInfo>
)
Jakmile jsem ale objekt změnil takto:
data class GetAchievementsResponse(
val aAchievements: List<AchievementInfo>,
val rAchievements: List<AchievementInfo>
)
Začal jsem dostávat tyto chyby:
JSON decoding error: Instantiation of [simple type, class cz.vitfo.client.GetAchievementsResponse] value failed for JSON property aAchievements due to missing (therefore NULL) value for creator parameter aAchievements which is a non-nullable type
JSON decoding error: Cannot deserialize instance of `java.util.ArrayList` out of FIELD_NAME token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.ArrayList` out of FIELD_NAME token
Nakonec jsem přišel na to, že z nějakého důvodu com.fasterxml.jackson
v tomto případě nezvládá camel case názvy proměnných. Řešením bylo toto pojmenování:
data class GetAchievementsResponse(
val a_achievements: List<AchievementInfo>,
val r_achievements: List<AchievementInfo>
)