我在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;
}
我想知道最佳做法。
答案 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().