详解Struts2中json 相互引用死循环解决办法

方法1 :利用Struts 2的支持的可配置结果,可以达到过滤器的效果。Action的处理结果配置支持正则表达式。

但是如果返回的对象是一个数组格式的Json数据。比如peson Bean中有对象persion1…person9,而我只要person1的json数据, 则可以用如下的正则表达式。

<struts>
  <constant name="struts.objectFactory" value="spring"/>
  <include file="struts-admin.xml"></include>
  <package name="default" extends="json-default">
    <action name="person" class="com.person.PersonAction" method="view">
    <result type="json">
      <param name="includeProperties">
      person/[/d+/]/.person1
      </param>>
    </result>
    </action>
  </package>
</struts>

excludeProperties拦截器的用法与此类同,如果拦截的仅仅是一个对象,如果拦截掉person Bean的整个对象。

<struts>
  <constant name="struts.objectFactory" value="spring"/>
  <include file="struts-admin.xml"></include>
  <package name="default" extends="json-default">
    <action name="person" class="com.person.PersonAction" method="view">
    <result type="json">
      <param name="excludeProperties">
      person
      </param>>
    </result>
    </action>
  </package>
</struts>

方法2:需要注意的是,如果用JSON插件把返回结果定为JSON。而JSON的原理是在ACTION中的get方法都会序列化

所以前面是get的方法只要没指定不序列化,都会执行。 如果该方法一定要命名为get*(比如实现了什么接口), 那么可以在该方法的前面加注解声明该方法不做序列化。

注解的方式为:@JSON(serialize=false)

除此之外,JSON注释还支持如下几个域:

  •   serialize:设置是否序列化该属性
  •   deserialize:设置是否反序列化该属性。
  •   format:设置用于格式化输出、解析日期表单域的格式。例如”yyyy-MM-dd'T'HH:mm:ss”。
//使用注释语法来改变该属性序列化后的属性名  

@JSON(name="newName")
 public String getName()
 {
  return this.name;
 }

需要引入 import org.apache.struts2.json.annotations.JSON;

@JSON(serialize=false)
public User getUser() {
  return this.User;
}

@JSON(format="yyyy-MM-dd")
public Date getStartDate() {
  return this.startDate;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • struts json 类型异常返回到js弹框问题解决办法

    struts json 类型异常返回到js弹框问题解决办法 当struts 框架配置了异常时 例如: <package name="sysCnn" namespace="/" extends="json-default"> <global-results> <result name="error">/WEB-INF/pages/error.jsp</result> <res

  • Struts2在打包json格式的懒加载异常问题

    Hibernate中如果出现了级联查询,就可能出现懒加载问题,比如我现在有个Account(管理员)类.Category(商品类别)和Product(商品)类,从左到右都是一对多的关系,而且从右到左都是设置了@ManyToOne(fetch=FetchType.LAZY).我现在要把商品信息查出来打包成json格式传到前台,我在后台使用查询语句为: from Product p left join fetch p.category where p.name like:name  这样就可以把Pr

  • Struts2 Result 返回JSON对象详解

    如果是作为客户端的HTTP+JSON接口工程,没有JSP等view视图的情况下,使用Jersery框架开发绝对是第一选择.而在基于Spring3 MVC的架构下,对HTTP+JSON的返回类型也有很好的支持.但是,在开发工作中,对功能的升级是基于既定架构是很常见的情况.本人碰到需要用开发基于Struts2的HTTP+JSON返回类型接口就是基于既定框架结构下进行的. Struts2返回JSON有两种方式:1.使用Servlet的输出流写入JSON字符串:2.使用Struts2对JSON的扩展.

  • struts2通过action返回json对象

    其实struts2通过action返回json挺简单的,但是就是老要忘,所以索性写在博客上.好的,开始. 首先是引入必须的jar包: struts2-json-plugin-2.3.24.jar 然后我们再写一个简单的action package com.mz.action; import com.mz.entity.User; import com.opensymphony.xwork2.ActionSupport; public class JsonAction extends Action

  • 在Action中以Struts2的方式输出JSON数据的实例

    下面是整个Action的完整代码: package cn.ysh.studio.struts2.json.demo.action; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.Servlet

  • ajax+json+Struts2实现list传递实例讲解

    由于实习需要,需要通过ajax来获取后台的List集合里面的值.由于前面没有接触过,所以今天就来研究下了. 一.首先需要下载JSON依赖的jar包.它主要是依赖如下: json-lib-2.2.2-jdk15 ezmorph-1.0.4 commons-logging-1.0.4 commons-lang-2.4 commons-collections-3.2.1 commons-beanutils 二.实例. 1.身份证错误信息Bean类(ErrorCondition.java) 复制代码 代

  • struts2+jquery+json实现异步加载数据(自写)

    复制代码 代码如下: //初始加载页面时 $(document).ready(function(){ //为获取单个值的按钮注册鼠标单击事件 $("#getMessage").click(function(){ $.getJSON("ceshi",function(data){ //通过.操作符可以从data.message中获得Action中message的值 $("#message1").html("<font color='

  • 在Struts2中如何将父类属性序列化为JSON格式的解决方法

    项目前端由于采用Extjs4,列表分页需要返回三个参数:totalCount(记录总数).start(开始位置).limit(每页条数).由于项目中将有很多grid需要分页,因此想将分页信息放到单独的Action类里边,需要分页的Action直接继承该类即可.原struts.xml配置如下: 复制代码 代码如下: <package name="admin" namespace="/admin" extends="json-default"&

  • 将json转换成struts参数的方法

    加入对象为{name:'tom','class':{className:'class1'},classMates:[{name:'lily'}]} struts2期待的格式是 name=tom&class.className=class1&classMates[0].name=lily function parseParam(param, key) { var paramStr = ""; if (param instanceof String || param ins

  • Json在Struts中的转换与传递方法

    本文主要探讨普通数据如何快速转换为Json数据,一共讨论2种方法: 首相准备页面和实体类: 页面: <body> <div id="topLoginDiv"> 用户名: <input name="user.name" id="loginName" />  密码: <input name="user.password" id="loginPassword" />

随机推荐