`

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;
	}

}
分享到:
评论

相关推荐

    httpclient和gson的JAR包.zip

    public static void main(String[] args) throws Exception { CloseableHttpClient httpClient = HttpClients.createDefault(); Gson gson = new Gson(); MyJavaObject myObject = new MyJavaObject(); // 创建...

    android利用Async 和Gson框架的网络请求

    } catch (Exception e) { e.printStackTrace(); } return response; } ``` 4. `onPostExecute()`方法会在网络请求完成后在主线程中调用,用于更新UI。这里我们可以将解析得到的对象传递给Activity或Fragment...

    OkHttp的封装和使用,以及OKhttp和Gson jar包

    httpCallback.onError(new Exception("HTTP错误代码:" + response.code())); } } }); } } ``` 这里定义了一个`HttpCallback`接口,用于处理请求的结果。 当涉及到JSON数据交换时,我们可以使用Gson进行数据的...

    gson,volley封装,实现网络返回json自动转对象

    `Gson`和`Volley`是Google推荐的两个强大的工具,分别用于处理JSON序列化与反序列化以及网络请求。本教程将深入讲解如何利用这两个库进行网络请求,并自动将返回的JSON数据转换为Java对象。 首先,`Gson`是Google...

    Springboot项目Netty服务并自定义Gson配置类解析数据包

    在本文中,我们将深入探讨如何在SpringBoot项目中利用Netty构建服务器,并自定义Gson配置类来解析接收到的数据包。Netty是一个高性能、异步事件驱动的网络应用程序框架,常用于创建高效的TCP和UDP服务。而Gson库则是...

    Gson解析空字符串发生异常的处理方法

    在Android应用开发中,Gson库是常用的JSON解析工具,它能方便地将JSON字符串转换为Java对象。然而,当遇到不规范的JSON数据,比如字段值为空字符串时,Gson解析可能会抛出异常,导致应用程序崩溃。本文将详细介绍...

    Android中使用Gson解析JSON数据的两种方法

    } catch (Exception e) { e.printStackTrace(); } ``` 2. **通过Gson对象的fromJson()方法映射JSON数据到对象**: 这种方法适用于已知JSON结构的情况,你可以创建与JSON结构对应的Java类(POJO对象)。例如,...

    Java中利用gson解析Json实例教程

    2. 创建Gson对象:通过Gson类创建一个Gson实例。 3. 将JSON字符串转换为Java对象:使用Gson实例的fromJson方法,将JSON格式的字符串转换为相应的Java对象。 4. 处理Java对象:在获得Java对象后,你可以按需读取...

    调用第三方接口和将json转化为list的jar包(包含httpClient,httpCore,Gson)

    public static void main(String[] args) throws Exception { // 创建HttpClient实例 CloseableHttpClient httpClient = HttpClients.createDefault(); // 创建HttpGet请求 HttpGet httpGet = new HttpGet(...

    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 = ...

    Android中gson、jsonobject解析JSON的方法详解

    } catch (Exception e) { e.printStackTrace(); } } ``` 在这个例子中,我们首先将JSON字符串转换为`JSONArray`,然后遍历数组,取出每个`JSONObject`,并通过`getInt`和`getString`方法获取对应的键值。 ### 3....

    Gson TypeAdapter使用技巧几例:数据免判空、解析后校验、预处理.zip

    `Gson`是一个由Google提供的Java库,用于在Java对象和JSON数据之间进行映射。在这个`Gson TypeAdapter`使用技巧的例子中,我们将深入探讨如何利用TypeAdapter来优化数据处理,包括数据免判空、解析后校验以及预处理...

    java-gson-usage:Java GSON Json 转换(使用)

    } catch (ParseException e) { throw new JsonParseException(e); } } } ``` 然后注册这个适配器: ```java Gson gson = new GsonBuilder() .registerTypeAdapter(Date.class, new CustomDateTypeAdapter()) ...

    安卓 JSON实现对象和数组的相互转换

    } catch (Exception e) { e.printStackTrace(); return null; } } // 将Java对象转换为JSON字符串 public static String objectToJson(Object obj) { if (obj == null) { return null; } return gson.to...

    gson ajax 数字精度丢失问题的解决方法

    public void render(BeatContext arg0) throws Exception { beat.getResponse().setCharacterEncoding("UTF-8"); beat.getResponse().setContentType("text/json;charset=UTF-8"); PrintWriter out = beat....

    json转Map,转javaBean,javBean和Map转json

    } catch (Exception e) { e.printStackTrace(); } } return map; } ``` 4. JavaBean到JSON的转换: 将JavaBean对象转换回JSON字符串,依旧使用`ObjectMapper`: ```java String jsonString = mapper....

    Android读取本地json文件的方法(解决显示乱码问题)

    - **Android操作JSON格式数据**:Android提供了Gson库、org.json库等工具来解析和生成JSON数据。 - **Android数据库操作**:SQLite是Android内置的轻量级数据库,可以用于持久化数据。 - **Android Activity操作**:...

    json依赖的jar包

    public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); MyObject obj = new MyObject(); String json = mapper.writeValueAsString(obj); System.out.println...

    java第三方json包

    public static void main(String[] args) throws Exception { User user = new User(); user.setName("John"); user.setAge(30); ObjectMapper mapper = new ObjectMapper(); String json = mapper....

Global site tag (gtag.js) - Google Analytics