`

exception(gson)

    博客分类:
  • gson
 
阅读更多

GsonBuilder gb=new GsonBuilder() ; 
        gb.excludeFieldsWithoutExposeAnnotation();
        Gson gson = gb.create();

userList = userService.findAll();
        userJson = gson.toJson(userList);
       
        getResponse().setContentType("application/json,charset=UTF-8");
        PrintWriter out = getResponse().getWriter();
        out.print(userJson);
        out.flush();
        out.close();

最后只用@Expose序列化需要的pojo实体类属性。。。。。

@Expose

private String id;

@Expose

private String username;

//----------------------------

//不需要序列化的属性

private String createTime;

 

//set,get

 

//配置关系维护,双方不用放弃任何一方

 

//网上其他的好像写序列化过滤策略,或属性值过滤策略,看的不是很懂,就简单的先用现在的吧。。。

 

//----------------------------------

刚刚又犯了一个错误:

<jsp:include page="../include/top.jsp">
       <c: param name="tag" value="contact"/>
 </jsp:include>

----------------------

中间的写成c标签的了,正确的应该为:

<jsp:include page="../include/top.jsp">
        <jsp :param name="tag" value="contact"/>
 </jsp:include>

 

这样解析到json中的数据就不再有createTime属性

 

------------------------------------(异常)

org.apache.jasper.JasperException: /WEB-INF/content/message/list-success.jsp(17,7) Expecting "jsp:param" standard action with "name" and "value" attributes

 

--------------------------------------------------------------------------------

话说gson循环引用的解决方法,一种是只序列化需要的元素,

第二种就是配置生成策略,下面是从网上找的一篇例子:

//gsonbulider创建对象:
public class GsonFactory {

    public static Gson build(final List<String> fieldExclusions, final List<Class<?>> classExclusions) {
        GsonBuilder b = new GsonBuilder();
        b.addSerializationExclusionStrategy(new ExclusionStrategy() {     //过滤策略
            @Override
            public boolean shouldSkipField(FieldAttributes f) {    //需要过滤的字段
                return fieldExclusions == null ? false : fieldExclusions.contains(f.getName());
            }

            @Override
            public boolean shouldSkipClass(Class<?> clazz) {   //需要过滤的类
                return classExclusions == null ? false : classExclusions.contains(clazz);
            }
        });
        return b.create();

    }
}
 
//使用实例
static {
 List<String> fieldExclusions = new ArrayList<String>();
 fieldExclusions.add("id");
 fieldExclusions.add("provider");
 fieldExclusions.add("products");

 List<Class<?>> classExclusions = new ArrayList<Class<?>>();
 classExclusions.add(Product.class);
 GSON = GsonFactory.build(null, classExclusions);
}

private static final Gson GSON;

public String getSomeJson(){
    List<Provider> list = getEntitiesFromDatabase();     //从数据库生成list集合
    return GSON.toJson(list);
}

  下面是我自己的处理方法:举例(一个组对应多个用户)

package com.lk.pojo;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.GenericGenerator;

import com.google.gson.annotations.Expose;


@Entity
@Table(name="t_user")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class User {

	@Expose
	private String id;
	@Expose
	private String username;
	@Expose
	private String password;
	@Expose
	private String email;
	@Expose
	private String createTime;
	@Expose
	private boolean enable;
        private UserGroup userGroup;                              
//这个脑袋上什么都不加
	
	
	@Id
	@GenericGenerator(name="userid",strategy="uuid")
	@GeneratedValue(generator="userid")
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getCreateTime() {
		return createTime;
	}
	public void setCreateTime(String createTime) {
		this.createTime = createTime;
	}
	public boolean isEnable() {
		return enable;
	}
	public void setEnable(boolean enable) {
		this.enable = enable;
	}
	/**
	 * 用户分组(多个用户在一个组里)
	 * @return
	 */
	@ManyToOne
	@JoinColumn(name="groupid")
	public UserGroup getUserGroup() {
		return userGroup;
	}
	public void setUserGroup(UserGroup userGroup) {
		this.userGroup = userGroup;
	}
	
	
	
	
}
 
package com.lk.pojo;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.GenericGenerator;

import com.google.gson.annotations.Expose;

@Entity
@Table(name="t_usergroup")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class UserGroup {

	@Expose
	private String id;
	@Expose
	private String groupName;
	@Expose
	private String createTime;
        @Expose
        private List<User> userList;            //这个脑袋上加@Expose



	
	@Id
	@GenericGenerator(name="usergroupid",strategy="uuid")
	@GeneratedValue(generator="usergroupid")
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getGroupName() {
		return groupName;
	}
	public void setGroupName(String groupName) {
		this.groupName = groupName;
	}
	public String getCreateTime() {
		return createTime;
	}
	public void setCreateTime(String createTime) {
		this.createTime = createTime;
	}
	
	
	@OneToMany(mappedBy="userGroup")
	public List<User> getUserList() {
		return userList;
	}
	public void setUserList(List<User> userList) {
		this.userList = userList;
	}
	
	
}

 json生成,我用的Gson,不过原理都是一样的吧........

@ParentPackage("json-default")
@Namespace("/user")
public class UserJsonAction extends BaseAction{

private static final long serialVersionUID = 1L;

@Action(value="userJson",
			results={@Result(name=SUCCESS,type="json")
	})
	public String userJson() throws IOException{
		userList = userService.findAll();
		userJson = getGson().toJson(userList);
		
		getResponse().setContentType("application/json,charset=UTF-8");
		PrintWriter out = getResponse().getWriter();
		out.print(userJson);
		out.flush();
		out.close();
		
		return SUCCESS;
	}
public Gson getGson(){
		GsonBuilder gb=new GsonBuilder() ;  
		gb.excludeFieldsWithoutExposeAnnotation();          //没有加@Expose的那部分不要生成json

		Gson gson = gb.create();
		return gson;
	}

}
分享到:
评论

相关推荐

    android 宿舍管理系统

    Gson gson = new Gson(); t = gson.fromJson(jsonstring, cls); } catch (Exception e) { // TODO: handle exception } return t; } public static String createJsonString(Object value){ Gson gson = ...

    LcxXmlSerialize:描述这是一个类似于gson和Jackson解析JSON的项目,旨在对XML进行序列化和反序列化

    这是一个类似于gson和Jackson解析JSON的项目,旨在对XML进行序列化和反序列化。 如何使用 目的 public static void main( String [] args) throws Exception { User record = new User (); record . setId( 10 )...

    java DATE与时间戳互化

    Exception in thread "main" java.text.ParseException: Unparseable date: "1970-01-06 11:45:55" 改正: //Date或者String转化为时间戳 SimpleDateFormat format = new SimpleDateFormat( " yyyy-MM-dd HH:mm...

    http依赖jar包.zip

    import org.apache.http.ParseException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; ...

    网络获取json解析json以及子线程显示

    public void onError(Exception e) { } });*/ } } private void sendRequestWithHttpURLConnection() { // 开启线程来发起网络请求 new Thread(new Runnable() { @Override public void run() { ...

    基于java的在线考试系统设计源码【个人计算机专业优秀毕业设计】.zip

    Gson POI Druid 数据库 MySQL 项目包结构 src.main java pers.corvey.exam controller common sys service common sys dao entity common sys ui support form hibernate security exception utils resources webapp...

    okhttp library

    1.实现get,post请求 2.支持上传,下载功能 3.支持Gson泛型解析json数据 4.使用mvc设计模式 5.支持自定义exception 6.支持自定义controller 7.封装glide图片库使用

    OkHttpUtils:OkHttp的应用demo

    OkHttp的应用示例,基本都是鸿祥的代码,只是将gson改成了fastjson,这个效率更高些###异步Get访问 OkHttpClientManager.getAsyn(SERVER_IP+"ListServlet?format=json", new OkHttpClientManager.ResultCallback...

    问题:实现应用程序问题的Java库+ json

    产品特点提出了一种表达REST API实现错误的通用方法与application/problem+json兼容依存关系Java 8 使用Maven Central的任何构建工具,或直接下载杰克逊(可选) Gson(可选)安装将以下依赖项添加到您的项目中: ...

    EasyHttp:Android 网络请求框架,简单易用,so easy

    简单易用的网络框架码云地址:博客地址:另外对 OkHttp 原理感兴趣的同学推荐你看以下源码分析文章集成步骤在项目根目录下的 build.gradle 文件中加入buildscript { ......}allprojects { repositories { // JitPack...

Global site tag (gtag.js) - Google Analytics