7

我有一个来自 REST API 的代码,用于@ResponseBody返回结果,并MappingJacksonHttpMessageConverter以 JSON 格式返回结果。

这一切都适用于复杂的对象。对于像int,这样的原语booleanstring我得到一个不以 { 或 [ 开头的 JSON。这不是有效的 JSON。

我想知道返回这样一个简单类型的正确方法是什么?我应该将它封装在一个对象中{ Result : true }吗?

谢谢

代码示例:

@RequestMapping(
        value = "/login",
        method = RequestMethod.POST)
@ResponseBody
public boolean Login(String username, String password) {
    return authenticationService.authenticate(username, password);
}

这将返回 just trueor falsewhich 是无效的 JSON。它应该被封装在一个对象或一个数组中(如果我理解正确的话)。

4

2 回答 2

8

它只返回真或假。你是对的,这不是 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}
于 2012-10-16T09:25:07.687 回答
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;
  }

}
于 2013-01-06T19:45:41.607 回答