//UserArea类

@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class UserArea {

private String province;
private Integer count;

@Override
//重新拼接成JSON格式的字符串
public String toString() {
return "{" +
"name: '" + province + '\'' +
", value: " + count +
'}';
}
}

 

//Controller中

System.out.println(manAreas);
System.out.println(manAreas.toString());
System.out.println(JSONObject.toJSONString(manAreas.toString()));
  • 这三行代码的输出结果为:
[{name: '北京', value: 1}, {name: '天津', value: 1}, {name: '河南', value: 4}, {name: '海南', value: 1}]
[{name: '北京', value: 1}, {name: '天津', value: 1}, {name: '河南', value: 4}, {name: '海南', value: 1}]
"[{name: '北京', value: 1}, {name: '天津', value: 1}, {name: '河南', value: 4}, {name: '海南', value: 1}]"
  • 这是我将UserArea 类的 toString() 方法重写成了  name:  value: 形式,manAreas打印出来的确是拼接好的 JSON格式,然后我想将这个manAreas.toString() 通过JSON格式返回给前台的ajax请求
map.put("manList",manAreas.toString());
map.put("womenList",womenAreas.toString());
return map;
  • 事实证明map集合的 value 是String类型的话,转换成JSON格式到前台value就不是拼好的JSON格式了,而是多了双引号,就像前面的第三次输出的结果一样,前台直接 data.manList 是解析不出来的,因为它是字符串类型的,不是JSON格式。
  • 此时,前台 用一个 eval 方法将字符串转换为JSON格式后就能用了
$.ajax({
type:'post',
dataType:'json',
url:'${ctx}/user/userArea',
success:function(data){
var userObj1 = eval("(" + data.manList + ")"); //转为JSON格式
var userObj2 = eval("(" + data.womenList + ")");
}
}
  • 此时的 userObj1 和 userObject2 就是标准的JSON格式了。
  •  

注意:如果后台Controller中方法的返回值是String类型,用 @ResponseBody 返回前台的还是个字符串类型,前台 ajax 中不能指定dataType为 JSON类型,否则会报错。