2015-10-17 3 views
8

Ich habe eine einfache Methode in Controller-Ist es möglich, in Spring MVC 4 Boolean als JSON zurückzugeben?

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

und reagieren will ich { "success": true }

Annontation zurückkehren sagt @ResponseBody, dass die Antwort JSON sein wird. Aber jetzt in Antwort empfange ich nur wahr.

Gibt es einen anderen Weg, um es zu lösen?

Oder sollte ich so etwas wie

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

tun, würde Ich mag Best Practice für das wissen.

Antwort

16

Sie können keine primitiven Typ (oder einen primitiven Wrapper-Typ) zurückgeben und bekommen JSON-Objekt als Antwort. Sie müssen ein Objekt zurückgeben, z. B. ein Map oder ein benutzerdefiniertes Domänenobjekt.

Der in Ihrer Frage gezeigte Map-Ansatz ist absolut gültig. Wenn Sie möchten, können Sie es zu einem schönen One-Liner mit Collections.singletonMap() kompaktieren.

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

Nicht möglich. Der Variablenname 'Erfolg' ist verloren. Verwenden Sie eine Map oder erstellen Sie eine kleine Wrapper-Klasse.

public class BooleanResult { 
    public boolean success; 
} 
2

Sie können keine boolean zurückgeben, jedoch betrachten ResponseEntities und verwenden Sie den HTTP-Statuscode mit Erfolg zu kommunizieren.

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

Diese Methode wird ein leeres Dokument zurück, aber Sie können den Statuscode steuern (VERBOTEN ist nur ein Beispiel, können Sie wählen dann den Statuscode, die besser geeignet ist, zum Beispiel NICHT GEFUNDEN?)

0

Ich benutze jsonobject, um dies zu tun.

return new JSONObject(). Put ("Ergebnis", true) .toString().

Verwandte Themen