在开发过程中,经常会使用到ajax请求,返回的数据类型一般是json格式,但有时候在action中会遇到json异常,造成前端无法获取到正确的数据。
public class TestAction extends ActionSupport { private Mapdata; //getter and setter public String test(){ data = new HashMap(); User user = new User(); user.setUserName("test"); data.put("user",user); return SUCCESS; } public String getData(){ return JSONObject.fromObject(data).toString(); } }
以上是一个简单的action类,定义了一个Map类型的data属性,以及test方法和getData方法。test方法向data中存放了一个User对象,然后返回SUCCESS;getData方法返回将data转化成json字符串后的结果。
但是我们在前端获取到的数据是这样的:
{ "user": { "class": "com.action.User","userName": "test" } }
可以看到user对象多了一个class属性,这就是json异常的体现。
出现这个问题的原因是java对象默认会被转化成一个json对象,而json对象有一个默认的class属性,它用来表示该对象的类型。而我们在前端获取到json数据后,一般会将json字符串转化成一个js对象,因为js中没有class属性,所以要去掉class属性,才能正确的使用对象属性。
public class TestAction extends ActionSupport { private Mapdata; //getter and setter public String test(){ data = new HashMap(); User user = new User(); user.setUserName("test"); data.put("user",user); return SUCCESS; } public String getData(){ JSONObject json = JSONObject.fromObject(data); json.remove("user.class"); return json.toString(); } }
解决方法是在方法getData中,先将data转化成一个JSONObject对象,然后移除每个对象的class属性,再将json对象转化成字符串后返回。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。