2015-10-17 76 views
8

我在控制器是否有可能在Spring MVC 4返回布爾值爲JSON?

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

有一個簡單的方法,並在響應我想返回{ "success": true }

Annontation @ResponseBody說,響應將是JSON。但現在在repsonse,我接受的只是真實的。

難道還有其他方法如何解決嗎?

,或者我應該做這樣的事情

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

我想知道這個最佳實踐。

回答

16

您不能返回原始類型(或原始包裝類型)並獲取JSON對象作爲響應。您必須返回一些對象,例如Map或自定義域對象。

在你的問題中顯示的地圖方法是完全有效的。如果你想要,你可以使用Collections.singletonMap()將它壓縮成一個很好的單行程。

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

不可能。變量名稱'成功'丟失。使用地圖或創建一個小包裝類。

public class BooleanResult { 
    public boolean success; 
} 
2

不能返回一個布爾值,但是,考慮使用​​並使用HTTP狀態碼來顯示成功。

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

此方法將返回一個空文件,但你可以控制的狀態代碼(禁止僅僅是一個例子,然後你可以選擇的狀態代碼是比較合適的,如沒有發現?)

0

我正在使用jsonobject來做到這一點。

返回新的JSONObject()。put(「result」,true).toString()。