2016-02-14 1 views
0

J'ai écrit mon backend en Java, et le point de terminaison est frappé avec un corps de la demande. Le critère d'évaluation a un corps JSON qui ressemble à ceciConvertir Int dans le corps de la demande à Long toujours

{"id": 1234, "data": {...}} 

Maintenant, je reçois les données de demande, et le stockage par l'identifiant. Je veux enregistrer les ids comme longs, cependant, les valeurs peuvent être n'importe où de int-valide à long-valide. J'utilise le framework Spring pour le sauvegarder. La fonction ressemble à ceci

public String getData (@RequestBody JSONObject jsonRequest) { 
    Long id_long = (Long) jsonRequest.get("id"); 

Cependant, je reçois cette erreur

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long 

C'est là où je suis coincé. Parfois, la valeur d'id sera valide comme 1234L, ou un nombre vraiment long qui est à longue portée. Cependant, parfois c'est la gamme int. Je n'ai pas tellement utilisé Java que je me demandais comment faire correctement le casting, donc je me fais toujours un peu long.

+1

Qu'est-ce que 'JSONObject' est-ce? Avez-vous essayé d'utiliser 'Long.valueOf()'? –

+0

C'est l'org.json.simple.JSONObject, et je ne l'ai pas fait, car l'erreur se produit lorsque j'essaie de le sortir de JSONObject. Je vais l'éditer pour le rendre plus clair. – Gargob

+0

Vous ne pouvez pas convertir 'Integer' en' Long' même si vous pouvez convertir 'int' en' long'. La raison en est que ces 2 types sont des classes et non des primitives. – Spotted

Répondre

1

La réponse simple est d'utiliser un objet java.lang.Number, qui est la superclasse du long et entier classes. Il a une méthode longValue() pour obtenir la valeur comme un long à chaque fois.

public String getData (@RequestBody User user) { 
    Long id_long = ((Number) jsonRequest.get("id")).longValue(); 

La réponse la plus longue serait de ne pas utiliser une classe générique comme JSONObject. Définissez votre propre classe, et utiliser le printemps pour se lier à elle ...

public class User { 
    private long id; 

    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 
} 

public String getData (@RequestBody User user) { 
    Long id_long = user.getId(); 
0

Integer a une méthode longValue qui retourne la valeur en tant que long (primitive). Vous pouvez l'affecter à id_long et laisser le autoboxing en l'enveloppant dans un Long.

public String getData (@RequestBody JSONObject jsonRequest) { 
    Long id_long = jsonRequest.get("id").longValue(); 
}