使用struts2中的<result type="json" name="success">碰到的问题

本文解决在Struts2框架中返回JSON数据时遇到的问题,包括前后端JSON格式不匹配及配置调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.163.com/li8008080@126/blog/static/26419415201053005415997/

 

在struts2中使用返回Json格式的数据碰到的一个问题。
1.在服务端使用struts自带的json工具类JSONUtil.serialize(obj)进行格式转换后返回到前台,同时服务端struts配置如下:
<action
name="PeerComparison-single" class="com.li.testAction"
method="testMethod">
            <param
name="aliases">#{"t":"symbol"}</param>
            <result
type="json" name="success">
                <param
name="callbackParameter">callback</param>
           
</result>           
       
</action>
前台调用方法如下:
$.ajaxSetup({cache:false});
    $.get(
   
    "${ctx}/test.action?p=test",
        {},
       
function(callback){
          
//经测试callback不能在此处,以json的格式访问。原因是在后台已经进行过json的format转换,而在请求后,又通过struts配置的result
type=“json” 进行再次json的format转换,导致到了前台无法识别。
       
});
2.由于在后台format的obj为map类型,所以立马想到撤销在后台的JSONUtil.serialize(obj)操作,直接让map在返回时由struts去format。到前台一调试,仍然不行。map根本就没有被format(map里面有数据,但到了前台却为空)。
3.看来只有绕开struts的返回结果format
json格式。还原后台格式化json数据的操作并修改struts配置:
<action name="PeerComparison-single"
class="com.li.testAction" method="testMethod">
            <param
name="aliases">#{"t":"symbol"}</param>
            <result
type="freemarker" name="success">
               
WEB-INF/template/cache.ftl
            </result>           
 
</action>
4.修改前台调用:
$.ajaxSetup({cache:false});
   
$.getJSON(
        "${ctx}/test.action?p=test",
        {},
       
function(callback){
          
//现在ok了,由于后台已经执行了将数据格式化为json数据。所以此处通过jquery的方法可以直接将服务端传来的符合json格式的数据转化为JavaScript可以识别的json格式并使用。
   
    });

转载于:https://www.cnblogs.com/blogonfly/articles/3638411.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值