是否有可能在Spring MVC 4中将Boolean返回为JSON?

时间:2015-10-17 09:56:22

标签: json spring spring-mvc jackson

我在Controller中有一个简单的方法

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

并在回复中我想要返回{ "success": true }

Annontation @ResponseBody表示响应将是JSON。但现在在回复中,我接受了真实。

还有其他方法可以解决吗?

或者我应该做像

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

我想知道最佳做法。

4 个答案:

答案 0 :(得分:25)

您无法返回基本类型(或原始包装类型)并获取JSON对象作为响应。您必须返回一些对象,例如Map或自定义域对象。

您问题中显示的地图方法完全有效。如果您愿意,可以使用Collections.singletonMap()将其压缩成漂亮的单行。

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

答案 1 :(得分:3)

您不能返回布尔值,但是,请考虑使用ResponseEntities并使用HTTP状态代码来传达成功。

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

此方法将返回一个空文档,但您可以控制状态代码(FORBIDDEN只是一个示例,您可以选择更合适的状态代码,例如NOT FOUND?)

答案 2 :(得分:1)

不可能。变量名称&#39;成功&#39;迷路了。使用地图或创建一个小包装类。

public class BooleanResult {
    public boolean success;
}

答案 3 :(得分:0)

我正在使用jsonobject来做这件事。

return new JSONObject().put("result",true).toString().