web-dev-qa-db-fra.com

Est-il possible dans Spring MVC 4 de retourner un booléen au format JSON?

J'ai une méthode simple dans Controller

@RequestMapping("admin")
public @ResponseBody
Boolean admin() {
    Boolean success = true;
    return success;
}

et en reponse je veux retourner { "success": true }

Annontation @ResponseBody indique que la réponse sera JSON. Mais maintenant, en réponse, je reçois juste vrai.

Y a-t-il un autre moyen de le résoudre?

Ou je devrais faire quelque chose comme

@RequestMapping("admin")
public @ResponseBody
Map<String, Boolean> admin() {
    Map<String, Boolean> success = new TreeMap<String, Boolean>();
    success.put("success", true);
    return success;
}

J'aimerais connaître les meilleures pratiques pour cela.

14
Maxim R

Vous ne pouvez pas renvoyer un type primitif (ou un type enveloppe) et obtenir un objet JSON en réponse. Vous devez renvoyer un objet, par exemple un objet Map ou un domaine personnalisé.

L'approche de la carte indiquée dans votre question est parfaitement valide. Si vous le souhaitez, vous pouvez le compacter dans un Nice one-liner à l’aide de Collections.singletonMap().

@RequestMapping
@ResponseBody
public Map<String, Boolean> admin() {
    return Collections.singletonMap("success", true);
}
23
Bohuslav Burghardt

Vous ne pouvez pas retourner de booléen, cependant, envisagez d'utiliser ResponseEntities et d'utiliser le code d'état HTTP pour communiquer le succès.

public ResponseEntity<String> admin() {
    if (isAdmin()) {
        return new ResponseEntity<String>(HttpStatus.OK);
    } else {
        return new ResponseEntity<String>(HttpStatus.FORBIDDEN);            
    }
}

Cette méthode renvoie un document vide, mais vous pouvez contrôler le code d'état (FORBIDDEN n'est qu'un exemple, vous pouvez ensuite choisir le code d'état le plus approprié, par exemple, NON TROUVÉ?)

3
Oliver

Pas possible. Le nom de variable 'succès' est perdu. Utilisez une carte ou créez une petite classe wrapper. 

public class BooleanResult {
    public boolean success;
}
1
atamanroman

J'utilise jsonobject pour le faire.

retourne un nouveau JSONObject (). put ("result", true) .toString ().

0
Burak Keceli