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> )