此处代码返回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"}]}
所以我该怎么做?
答案 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"}]}