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

LittleLeeZi LittleLeeZi 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
问题是这样的,做项目的过程中发现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()了?
...全文
评论 4
收藏 已收藏
分享
返回顶部
LittleLeeZi
Web 开发 81,108 成员 341,721 内容