json序列化返回到页面

用json过滤掉不需要序列化的属性 。解决Refrence和LazyLoading引起的死循环问题 。

这里用阿里巴巴的fastjson会更方便,性能更好。当返回的是一个对象,或集合,需要序列化回显到页面的,以返回list为例

举个例子:

//将list数据序列化为json格式数据,返回到客户端浏览器
public void writeList2json(List list, final String[] excludes) {
PropertyFilter propertyFilter = new PropertyFilter() {
@Override
public boolean apply(Object object, String name, Object value) {
// TODO Auto-generated method stub
for (String string : excludes) {
if(name.equalsIgnoreCase(string)){
return false;
}
}
return true ;
}
};
String json = JSON.toJSONString(list,propertyFilter,
SerializerFeature.DisableCircularReferenceDetect);

ServletActionContext.getResponse().setContentType(
"text/json;charset=UTF-8");
try {
ServletActionContext.getResponse().getWriter().print(json);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

这里用PropertyFilter(属性过滤器,过滤掉不需要的返回的数据)

实体类需要实现Serializable接口

package cn.itcast.crm.domain;

import java.io.Serializable;

public class Customer implements Serializable {
private Integer id;
private String name;
private String station;
private String telephone;
private String address;

private String decidedzone_id;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getStation() {
return station;
}

@JSONField(serialize=false)

public void setStation(String station) {
this.station = station;
}

public String getTelephone() {
return telephone;
}

public void setTelephone(String telephone) {
this.telephone = telephone;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

public String getDecidedzone_id() {
return decidedzone_id;
}

public void setDecidedzone_id(String decidedzone_id) {
this.decidedzone_id = decidedzone_id;
}

}

可以通过在需要过滤的属性上加@JSONField(serialize=false)注解。也可以通过在调用方法排除不需要序列化的属性

public String findCustomersAssociation(){
List<Customer> list = customerService.findhasassociationCustomers(model.getId());
String[] excludes = new String[]{"station","telephone","address","decidedzone_id"};
this.writeList2json(list, excludes);
return NONE;
}

fastjson已经处理了懒加载引起的死循环问题。如果是用的jsonlib,就需要在实体类的映射文件中,<many-to-one>标签中加一个lazy=false的属性.

时间: 2024-10-22 16:54:10

json序列化返回到页面的相关文章

本文使用springMVC和ajax,实现将JSON对象返回到页面

一.引言 本文使用springMVC和ajax做的一个小小的demo,实现将JSON对象返回到页面,没有什么技术含量,纯粹是因为最近项目中引入了springMVC框架. 二.入门例子 ①. 建立工程,并导入相应spring jar包和解析json的包fastjson. ②. 在web.xml文件中配置Spring的核心类DispatcherServlet ③. 配置Spring的核心配置文件spring-servlet.xml ④. 编写实体类Person public class Person

django学习之- json序列化

序列化操作 - Errordict - 自定义Encoder - django的模块可以直接序列化 第一种: from django.core import serializers # 通过这个模块对queryset对象可以直接序列化 ret = models.tb.objects.all() data = serializers.serialize("json",ret) #这里指定将ret序列化为json 第二种: ret = models.tb.objects.values('i

Nginx下HTML页面POST请求静态JSON数据返回405状态

在浏览器访问HTML页面,发现一些静态JSON数据没有显示,F12查看,如下图所示: 可以看到请求方式为POST 将请求链接复制在浏览器地址栏访问,可以正常请求到数据 F12查看,可以看到请求方式为GET,状态码为200 可知问题为:Nginx下HTML页面POST请求静态JSON数据返回405状态,但用GET请求则正常返回数据. 百度后,有说,Apache.IIS.Nginx等绝大多数Web服务器,都不允许静态文件响应POST请求. 下面进行测试: 系统为CentOS7.5,Nginx(版本:

Response返回JSON数据到前台页面

转自博文:<Response JSON数据返回>http://blog.csdn.net/anialy/article/details/8665471 简述: 在servlet填充Response的时候,做JSON格式的数据转换 使用的类是net.sf.json.JSONObject,传入response对象和返回的显示类,修改response,返回前台JSON格式数据 代码: /** * 以JSON格式输出 * @param response */ protected void respon

WCF: 以Json格式返回对象

1.先建一个WCF Service 建一个ServiceContract接口 1 [ServiceContract] public interface IJsonWCFService { /// <summary> /// GetJsonResult /// </summary> /// <param name="name"></param> /// <param name="address"></p

C# Json 序列化与反序列化二

/// <summary> /// 将对象转换为 JSON 字符串 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="input"></param> /// <returns></returns> public static string ScriptSerialize<T>

Json序列化之.NET开源类库Newtonsoft.Json的研究

一.Json简介                                                                                                                    JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的文本格式,可以很容易在各种网络.平台和程序之间传输.JSON的语法很简单,

用js解析经json序列化后的C#的DateTime类型数据

用js解析经json序列化后的C#的DateTime类型数据 (2012-09-21 19:36:03) 转载▼ 标签: 杂谈 分类: javascript // val为经json直接序列化后的C#的DateTime类型的数据function formatTime(val) {    var re = /-?\d+/;    var m = re.exec(val);    var d = new Date(parseInt(m[0]));// 按[2012-02-13 09:09:09]的格

扩展方法对json序列化及反序列化

this+类型名+变量名,.NET 3.0 之后新增的一种特性,叫"扩展方法". int类型变量都能调用toString()方法,将int类型变量转换成string型变量:如果需要更改转换的形式,比如将int类型变量转换成指定格式的字符串,并且这种方法调用非常频繁,可以编写扩展方法.扩展方法能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 例如下列代码: n