【求大神】struts2返回json的格式问题

LittleLeeZi 2014-02-20 10:57:06
问题是这样的,做项目的过程中发现struts2返回的json字符串有转义符和两端的双引号,造成接收端解析出错。代码如下:

public class GetStaffInfoAction extends ActionSupport{
@Autowired
private StaffService staffServiceImpl;

private String username;
public void setUsername(String usernmae) {
this.username = username;
}
private String result;
public String getResult() {
return result;
}

@Override
public String execute(){
Staff staff=staffServiceImpl.getStaffInfo(username);

result=JSONObject.fromObject(staff).toString();
return "str_result";
}
}

这种情况下页面得到结果是:"{\"checked\":false,\"text\":\"root\",\"id":0}"
有转义符,两端有双引号,转换会出错。改成下面这样,

public class GetStaffInfoAction extends ActionSupport{
@Autowired
private StaffService staffServiceImpl;

private String username;
public void setUsername(String username) {
this.username = username;
}

private JSONObject json;
public JSONObject getJson() {
return json;
}

@Override
public String execute(){
Staff staff=staffServiceImpl.getStaffInfo(username);

json=JSONObject.fromObject(staff);
return "json_result";
}
}


<global-results>
<result name="str_result" type="json">
<param name="root">result</param>
</result>
<result name="is_success" type="json">
<param name="root">success</param>
</result>
<result name="json_result" type="json">
<param name="root">json</param>
</result>
<result type="exception">/error.jsp</result>
</global-results>

直接把对象返回,这是页面得到的是{"checked":false,"text":"root","id":0}
这种结果没有错误,可以直接使用。

问题是解决了,可是我不明白是为什么,查资料有人是这样写的:
【在action中搞了json序列化,而struts2的json结果类型又搞了一次json序列化,所以就出现了你说的情况。正确的做法是在action中的result不要使用String类型,而是用Object类型,你想返回什么就直接赋值,然后struts2做他该做的那次序列化就ok了。】
是不是说<result name="json_result" type="json">的配置在返回数据之前会对数据做一次序列化,所以action里不再需要toString()了?
...全文
241 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
LittleLeeZi 2014-02-20
  • 打赏
  • 举报
回复
没人吗?自己顶
tony4geek 2014-02-20
  • 打赏
  • 举报
回复
你指定了string 就要像 这种"{\"checked\":false,\"text\":\"root\",\"id":0}"
别闹腰不好 2014-02-20
  • 打赏
  • 举报
回复
你要是用ajax,就转成json,到页面取到就能用了, 你这也没用ajax,直接就对象到页面就行了。
ay转身遇 2014-02-20
  • 打赏
  • 举报
回复
肯定不能用string来返回啦,string类型就是把结果加上"",你的正确结果是{"checked":false,"text":"root","id":0}它要加上"",当然这个字符串里面""很多,所以在处理的时候它自己把结果转换为带转椅字符的字符串: "{\"checked\":false,\"text\":\"root\",\"id":0}"

81,087

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧