【发布时间】:2014-10-15 04:54:10
【问题描述】:
我正在尝试使用Gson.ToJson(Object) 方法在下面转换此类,但它正在返回该类的对象哈希码,例如:br.com.helpradar.entity.User@475fdaaa
但是,我可以毫无问题地检索 user.expertise 并具有所有关系:Gson.ToJson(user.getExpertise)
@Entity
@SequenceGenerator(name="seqUser", sequenceName="SEQ_USER", allocationSize=1)
public class User {
@Id
private Long id;
@Column(nullable=false)
private String name;
@OneToOne
private Contact contact;
//enum
private TypeUser typeUser;
@ManyToMany(cascade = { CascadeType.ALL })
@JoinTable(name = "USER_REVIEW",
joinColumns = { @JoinColumn(name = "USER_ID") },
inverseJoinColumns = { @JoinColumn(name = "REVIEW_ID") })
@Column(name="REVIEW")
private Set<Review> review= new HashSet<Review>();
@ManyToMany(cascade = { CascadeType.ALL })
@JoinTable(name = "USER_EXPERTISE",
joinColumns = { @JoinColumn(name = "USER_ID") },
inverseJoinColumns = { @JoinColumn(name = "EXPERTISE_ID") })
@Column(name="EXPERTISE")
private Set<Expertise> expertise = new HashSet<Expertise>();
}
这是我的 Gson 方法:
Gson gson = new GsonBuilder()
.registerTypeAdapter(User.class, new MyTypeAdapter<Expertise>())
.registerTypeAdapter(User.class, new MyTypeAdapter<Review>())
.create();
return gson.toJson(user);
这是我的 MyTypeAdapter:
class MyTypeAdapter<T> extends TypeAdapter<T> {
public T read(JsonReader reader) throws IOException {
return null;
}
public void write(JsonWriter writer, T obj) throws IOException {
if (obj == null) {
writer.nullValue();
return;
}
writer.value(obj.toString());
}
}
那么,如何让Gson.ToJson(user) 实际返回一个 Json 字符串,以便我可以在另一端使用 Gson.FromJson?
提前致谢。
【问题讨论】:
-
为什么有类型适配器?为什么要将
toString的输出写入JsonWriter? -
@SotiriosDelimanolis 如果没有类型适配器,Gson 会给我一个 StackOverFlow。 gson.ToJson(user) 的输出是一个 Restfull 方法的返回。
-
Review对象是否有对其User的反向引用? -
您知道
toString方法的工作原理吗?它的目的是什么? -
这是一个危险的游戏。阅读here。