使用Spring的AOP拦截Struts2的Action时输出Json出错

  使用Spring的AOP拦截Struts2的Action时输出Json出错,一直报org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException。

  百度Google了一晚上无果,基本都是在说,因为Spring注入service类时生成了get方法,然而这些类无法被序列化因而报错。在get方法上面增加以下注解即可解决。

@JSON(serialize = false)

  最终在官方文档上找到了原因。

  https://struts.apache.org/docs/json-plugin.html#JSONPlugin-Proxiedobjects

  百度+人工翻译:因为注解无法被继承,所以json无法检测到Action类方法的注解。为了解决这个问题,将ignoreSMDMethodInterfaces属性设置为false(默认为true),让插件去检查Action类的所有父类和接口的方法上的注解。注意:可能会出现性能问题。

<param name="ignoreSMDMethodInterfaces">false</param>

  完整示范为:

<action name="contact" class="package.ContactAction" method="smd">
   <interceptor-ref name="json">
      <param name="enableSMD">true</param>
      <param name="ignoreSMDMethodInterfaces">false</param>
   </interceptor-ref>
   <result type="json">
      <param name="enableSMD">true</param>
      <param name="ignoreInterfaces">false</param>
   </result>
   <interceptor-ref name="default"/>
</action>

  然而并没有用。确实输出Json了,但并不是我那个Action类内的属性。哪位同行要是知道原因劳烦告知。

  但既然知道了是注解上出的问题,那我就用配置来解决:

<result type="json">
  <param name="includeProperties">telNo,result,msg</param>
  <param name="noCache">true</param>
  <param name="excludeNullProperties">true</param>
  <param name="statusCode">200</param>
  <param name="encoding">UTF-8</param>
</result>

  直接把需要输出的属性填入includeProperties属性,收工。


  2016-03-20补充,输出list需指定具体输出list的哪些属性,或者直接这样

<param name="includeProperties">areaList.*,userList.*</param>


转载于:https://my.oschina.net/mzdbxqh/blog/643922

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值