我有一个简单的方法在控制器
@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().