我有一个来自REST API的代码,它使用@ResponseBody
来返回结果,而MappingJacksonHttpMessageConverter
则以JSON格式返回它。
这一切都适用于复杂的对象。
对于int
,boolean
和string
这样的原语,我得到的JSON不是以{或[。
这不是有效的JSON。
我想知道返回这样一个简单类型的正确方法是什么?
我应该将其封装在{ Result : true }
?
由于
代码示例:
@RequestMapping(
value = "/login",
method = RequestMethod.POST)
@ResponseBody
public boolean Login(String username, String password) {
return authenticationService.authenticate(username, password);
}
这将只返回true
或false
这是一个无效的JSON。它应该封装在一个对象或一个数组中(如果我理解正确的话)。
答案 0 :(得分:8)
它只返回true或false。而你是正确的不是json。
它不能是json,因为它不是一个对象,它只是一个原语,所以它很好 - 它将被分配给你的成功处理程序中的一个javascript变量。
如果你返回一个布尔列表,你会得到一个数组:
[true,false,true]
如果你必须完全形成json,不要返回原语使用hashmap或自定义包装器对象。
public
@ResponseBody
Map<String, Boolean> getTrue() {
Map<String, Boolean> map = new HashMap<String, Boolean>(1){{put("result", Boolean.TRUE);}};
return map;
}
返回hashmap可能是获取所需json的最简单,最好的方法:
{"result":true}
答案 1 :(得分:4)
我发现使用方便
public class ObjWrapper<T> implements Serializable {
private T obj;
public ObjWrapper(T obj) {
this.obj = obj;
}
public T getObj() {
return obj;
}
}
然后在控制器中:
@RequestMapping("/getString") @ResponseBody
public ObjWrapper<String> getString() { ...
和客户端(jquery)
$.getJson("getString", {}, function (data) {
alert(data.obj);
})
与列表相同:
public class ListWrapper<T> implements Serializable {
private List<T> content;
public ListWrapper(T... objects) {
content = Arrays.asList(objects);
}
public ListWrapper(List<T> content) {
this.content = content;
}
public List<T> getContent() {
return content;
}
}