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;
}
}
分享到:
相关推荐
public static void main(String[] args) throws Exception { CloseableHttpClient httpClient = HttpClients.createDefault(); Gson gson = new Gson(); MyJavaObject myObject = new MyJavaObject(); // 创建...
} catch (Exception e) { e.printStackTrace(); } return response; } ``` 4. `onPostExecute()`方法会在网络请求完成后在主线程中调用,用于更新UI。这里我们可以将解析得到的对象传递给Activity或Fragment...
httpCallback.onError(new Exception("HTTP错误代码:" + response.code())); } } }); } } ``` 这里定义了一个`HttpCallback`接口,用于处理请求的结果。 当涉及到JSON数据交换时,我们可以使用Gson进行数据的...
`Gson`和`Volley`是Google推荐的两个强大的工具,分别用于处理JSON序列化与反序列化以及网络请求。本教程将深入讲解如何利用这两个库进行网络请求,并自动将返回的JSON数据转换为Java对象。 首先,`Gson`是Google...
在本文中,我们将深入探讨如何在SpringBoot项目中利用Netty构建服务器,并自定义Gson配置类来解析接收到的数据包。Netty是一个高性能、异步事件驱动的网络应用程序框架,常用于创建高效的TCP和UDP服务。而Gson库则是...
在Android应用开发中,Gson库是常用的JSON解析工具,它能方便地将JSON字符串转换为Java对象。然而,当遇到不规范的JSON数据,比如字段值为空字符串时,Gson解析可能会抛出异常,导致应用程序崩溃。本文将详细介绍...
} catch (Exception e) { e.printStackTrace(); } ``` 2. **通过Gson对象的fromJson()方法映射JSON数据到对象**: 这种方法适用于已知JSON结构的情况,你可以创建与JSON结构对应的Java类(POJO对象)。例如,...
2. 创建Gson对象:通过Gson类创建一个Gson实例。 3. 将JSON字符串转换为Java对象:使用Gson实例的fromJson方法,将JSON格式的字符串转换为相应的Java对象。 4. 处理Java对象:在获得Java对象后,你可以按需读取...
public static void main(String[] args) throws Exception { // 创建HttpClient实例 CloseableHttpClient httpClient = HttpClients.createDefault(); // 创建HttpGet请求 HttpGet httpGet = new HttpGet(...
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 = ...
} catch (Exception e) { e.printStackTrace(); } } ``` 在这个例子中,我们首先将JSON字符串转换为`JSONArray`,然后遍历数组,取出每个`JSONObject`,并通过`getInt`和`getString`方法获取对应的键值。 ### 3....
`Gson`是一个由Google提供的Java库,用于在Java对象和JSON数据之间进行映射。在这个`Gson TypeAdapter`使用技巧的例子中,我们将深入探讨如何利用TypeAdapter来优化数据处理,包括数据免判空、解析后校验以及预处理...
} catch (ParseException e) { throw new JsonParseException(e); } } } ``` 然后注册这个适配器: ```java Gson gson = new GsonBuilder() .registerTypeAdapter(Date.class, new CustomDateTypeAdapter()) ...
} catch (Exception e) { e.printStackTrace(); return null; } } // 将Java对象转换为JSON字符串 public static String objectToJson(Object obj) { if (obj == null) { return null; } return gson.to...
public void render(BeatContext arg0) throws Exception { beat.getResponse().setCharacterEncoding("UTF-8"); beat.getResponse().setContentType("text/json;charset=UTF-8"); PrintWriter out = beat....
} catch (Exception e) { e.printStackTrace(); } } return map; } ``` 4. JavaBean到JSON的转换: 将JavaBean对象转换回JSON字符串,依旧使用`ObjectMapper`: ```java String jsonString = mapper....
- **Android操作JSON格式数据**:Android提供了Gson库、org.json库等工具来解析和生成JSON数据。 - **Android数据库操作**:SQLite是Android内置的轻量级数据库,可以用于持久化数据。 - **Android Activity操作**:...
public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); MyObject obj = new MyObject(); String json = mapper.writeValueAsString(obj); System.out.println...
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....