相关疑难解决方法(0)

Gson:如何在没有注释的情况下从序列化中排除特定字段

我正在努力学习Gson,而我正在努力进行场上排斥.这是我的课程

public class Student {    
  private Long                id;
  private String              firstName        = "Philip";
  private String              middleName       = "J.";
  private String              initials         = "P.F";
  private String              lastName         = "Fry";
  private Country             country;
  private Country             countryOfBirth;
}

public class Country {    
  private Long                id;
  private String              name;
  private Object              other;
}
Run Code Online (Sandbox Code Playgroud)

我可以使用GsonBuilder并添加ExclusionStrategy像一个字段名称firstNamecountry,但我似乎无法管理排除像某些领域的性能country.name.

使用该方法public boolean shouldSkipField(FieldAttributes fa),FieldAttributes不包含足够的信息来匹配具有过滤器的字段country.name.

对于这个问题的解决方案,我将不胜感激.

PS:我想避免注释,因为我想对此进行改进并使用RegEx来过滤字段.

谢谢

编辑:我试图看看是否可以模拟Struts2 JSON插件的行为

使用Gson

<interceptor-ref name="json">
  <param name="enableSMD">true</param>
  <param name="excludeProperties">
    login.password, …
Run Code Online (Sandbox Code Playgroud)

java serialization json gson

404
推荐指数
12
解决办法
31万
查看次数

Android SharedPreferences如何保存/存储对象

我们需要在许多地方获取用户对象,其中包含许多字段.登录后,我想保存/存储这些用户对象.我们怎样才能实现这种情况?

我不能这样存储它:

SharedPreferences.Editor prefsEditor = myPrefs.edit();
prefsEditor.putString("BusinessUnit", strBusinessUnit);
Run Code Online (Sandbox Code Playgroud)

android sharedpreferences

188
推荐指数
6
解决办法
17万
查看次数

以共享首选项存储和检索类对象

在Android中,我们可以在共享首选项中存储类的对象,并在以后检索该对象吗?

如果有可能怎么办?如果不可能做到这一点的其他可能性是什么?

我知道序列化是一种选择,但我正在寻找使用共享偏好的可能性.

android object sharedpreferences

108
推荐指数
5
解决办法
10万
查看次数

Gson StackOverflowError

我有一个简单的返回类,它接受异常或我们的业务对象之一.如果REST Web服务方法抛出异常,它会捕获它并在响应中设置异常.如果没有,它会在响应中设置返回值并将其序列化.

在我的情况下,我得到一个InvocationTargetError,它包装了我们的一个服务异常.我在我的返回类的异常上设置了这个并得到以下堆栈跟踪:

java.lang.StackOverflowError
com.google.gson.reflect.TypeToken.hashCode(TypeToken.java:280)
java.util.HashMap.get(HashMap.java:300)
java.util.Collections$SynchronizedMap.get(Collections.java:1975)
com.google.gson.Gson.getAdapter(Gson.java:337)
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:55)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
and so on...
Run Code Online (Sandbox Code Playgroud)

有人有主意吗?这看起来像是Gson 2.2.2中的一个错误.

java json gson

4
推荐指数
1
解决办法
6429
查看次数

gson.toJson()在Servlet中抛出StackOverflowError

我有客户端对象列表

List<Client> clientsList=new ArrayList<Client>();
clientsList=clientDao.GetAllClients();
Run Code Online (Sandbox Code Playgroud)

实体客户端将其他列表作为属性:

@ManyToOne(optional=false)
private User createdBy;


@ManyToMany(mappedBy = "Clients")
private Set<ClientType> Types=new HashSet();


@ManyToOne(optional=false)
private LeadSource id_LeadSource;
@ManyToOne(optional=false)
private Agencie id_Agencie;

@OneToMany(cascade=CascadeType.ALL,mappedBy="Owner")
private Set<Propertie> properties=new HashSet();

@OneToMany(cascade=CascadeType.ALL,mappedBy="buyer")
private Set<Sale> sales=new HashSet();

@OneToMany(cascade=CascadeType.ALL,mappedBy = "client")
private Set<Rent> Rents=new HashSet();

@OneToMany(cascade=CascadeType.ALL,mappedBy = "clientDoc")
private Set<Document> Docuements=new HashSet();
Run Code Online (Sandbox Code Playgroud)

当我尝试将客户端列表转换为json格式时

out.write(new Gson().toJson(clientsList));
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

java.lang.StackOverflowError
at com.google.gson.stream.JsonWriter.beforeName(JsonWriter.java:603)
at com.google.gson.stream.JsonWriter.writeDeferredName(JsonWriter.java:401)
at com.google.gson.stream.JsonWriter.value(JsonWriter.java:512)
at com.google.gson.internal.bind.TypeAdapters$8.write(TypeAdapters.java:270)
at com.google.gson.internal.bind.TypeAdapters$8.write(TypeAdapters.java:255)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:113)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:240)
Run Code Online (Sandbox Code Playgroud)

java json servlets java-ee angularjs

2
推荐指数
1
解决办法
5212
查看次数