如何使用resful服务返回json数组

时间:2015-08-19 10:04:16

标签: java arrays json spring-mvc

此处代码返回JSON

@RequestMapping(method = RequestMethod.GET, value="/json")
public @ResponseBody employee json(HttpServletRequest request) {
    String name = request.getParameter("name");
    employee ep = new employee();
    ep.setResult(name);
    return ep;      
}

班级员工:

public class employee {
    String result;
    public employee(){}

    public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }
    public employee(String result) {
        this.result = result;
    }
}

当我拨打网址时:http://localhost:8080/controller/json?name=abc

我的结果是{"result":"abc"}

但我的期望是{"employee" :[{"result":"abc"}]}

所以我该怎么做?

3 个答案:

答案 0 :(得分:0)

您可以获得以下输出:

{
    "employee": {
        "result": "abc"
    }
}

通过注释您的Employee班级:

@JsonTypeInfo(include=JsonTypeInfo.As.WRAPPER_OBJECT, use=Id.NAME)
public class employee {
    // same class body
}

答案 1 :(得分:0)

首先,一个类属性能够映射到一个JSON数组,该属性应该是一个Collection类型,如List,Set,Map等。所以如果你将employee类定义为

public class employee {
    List<String> result;
    public employee(){}

    public List<String> getResult() {
        return result;
    }

    public void setResult(List<String> result) {
        this.result = result;
    }
    public employee(String result) {
        this.result = result;
    }
}

比Spring会将result属性映射到数组。在您的情况下,由于您的结果属性不是Collection,因此无需将其映射到JSON数组。

即使你在课堂上使用了一个Collection,你得到的结果也会是这样的 {"result":["abc"]}但不是{employee:{result:["abc"]}。为了能够获得所需的结果,您需要一个包装器对象。你可以参考Gary的这部分答案。

答案 2 :(得分:0)

您需要具有以下类型的类才能获得预期的json结果:

具有结果属性的类:

class Second{

  String result;

  public Second(String r){
    this.result = r;
  }

  public String getResult() {
     return result;
  }
  public void setResult(String result) {
    this.result = result;
  }
}

包含具有属性结果的类的列表的类:

class Employee{

    List<Second> employee  = new ArrayList<Second>();

    public List<Second> getEmployee() {
        return employee;
    }
    public void setEmployee(List<Second> s) {
        this.employee = s;
    }
}

你会得到:

{"employee":[{"result":"aaa"},{"result":"bbb"},{"result":"ccc"}]}