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



我有一个简单的方法在控制器

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

和响应我想返回{ "success": true }

注释@ResponseBody表示响应将是JSON。但是现在我得到的回应是真的。

还有别的办法解决吗?

或者我应该写

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

我想知道最好的做法。

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

你问题中的Map方法是完全有效的。如果您愿意,可以使用Collections.singletonMap()将其压缩成一个漂亮的一行代码。

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

你不能返回一个布尔值,但是,考虑使用ResponseEntities并使用HTTP状态码来通信成功。

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

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

不可能。变量名"success"丢失了。使用映射或创建一个小包装器类。

public class BooleanResult {
    public boolean success;
}

我使用jsonobject来做这个。

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

最新更新