web-dev-qa-db-fra.com

java.lang.Integer ne peut pas être converti en Java.lang.Long

Je suis censé recevoir un entier long dans mon service Web.

long ipInt = (long) obj.get("ipInt");

Lorsque je teste mon programme et que je mets ipInt value = 2886872928, cela me donne du succès. Cependant, lorsque je teste mon programme et que je mets ipInt value = 167844168, cela me donne une erreur:

Java.lang.ClassCastException: Java.lang.Integer ne peut pas être converti en Java.lang.Long

L'erreur est pointer vers le code ci-dessus.

Pour info, mes données sont au format JSON:

{
    "uuID": "user001",
    "ipInt": 16744168,
    "latiTude": 0,
    "longiTude": 0,
}

Y a-t-il une suggestion pour que je puisse m'assurer que mon code puisse recevoir à la fois la valeur ipInteger?

5
inayzi

Vous mentionnez que l'approche actuelle fonctionne lorsque vous fournissez une valeur en dehors de la plage d'entiers, mais échoue lorsque vous êtes dans la plage d'entiers. C'est un comportement étrange pour une API, car il semble que vous besoin pour vérifier le type de retour vous-même. Vous pouvez faire cela. La manière habituelle est avec instanceof. Quelque chose comme,

long ipInt;
Object o = obj.get("ipInt");
if (o instanceof Integer) {
    ipInt = ((Integer) o).intValue();
} else if (o instanceof Long) {
    ipInt = ((Long) o).longValue();
}
0
Elliott Frisch