java – Jackson,序列化一个引用的属性
发布时间:2020-05-29 00:42:58 所属栏目:Java 来源:互联网
导读:序列化具有其他对象引用的 Java对象时,我只需要序列化嵌套对象的一个属性(通常是外键的情况,因此序列化对象引用的“id”属性).其他一切. 例如,我有两个类需要序列化为JSON XML(为清晰起见,删除了JPA注释): 关系:用户 – (一对多)AddressInformation; 另外:
|
序列化具有其他对象引用的 Java对象时,我只需要序列化嵌套对象的一个属性(通常是外键的情况,因此序列化对象引用的“id”属性).其他一切. 例如,我有两个类需要序列化为JSON& XML(为清晰起见,删除了JPA注释): 关系:用户 – >(一对多)AddressInformation; @XmlRootElement
public class User {
private String id;
private String firstName;
private String lastName;
private String email;
private AddressInformation defaultAddress;
private Set<AddressInformation> addressInformation;
public User() {
}
@JsonProperty(value = "id")
@XmlAttribute(name = "id")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@JsonProperty(value = "firstname")
@XmlAttribute(name = "firstname")
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@JsonProperty(value = "lastname")
@XmlAttribute(name = "lastname")
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@JsonProperty(value = "email")
@XmlAttribute(name = "email")
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@JsonIgnore
public Set<AddressInformation> getAddressInformation() {
return addressInformation;
}
public void setAddressInformation(Set<AddressInformation> addressInformation) {
this.addressInformation = addressInformation;
}
@JsonProperty(value = "defaultaddress")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,property = "id")
public AddressInformation getDefaultAddress() {
return defaultAddress;
}
public void setDefaultAddress(AddressInformation defaultAddress) {
this.defaultAddress = defaultAddress;
}
}
地址信息: @XmlRootElement
public class AddressInformation {
private String id;
private String address;
private String details;
private User user;
@JsonProperty(value = "id")
@XmlAttribute(name = "id")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,property = "id")
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@JsonProperty(value = "details")
@XmlAttribute(name = "details")
public String getDetails() {
return details;
}
public void setDetails(String details) {
this.details = details;
}
@JsonProperty(value = "address")
@XmlAttribute(name = "address")
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public AddressInformation() {
super();
}
}
enter code here
例如,在序列化用户时,我需要: {
"id" : "idofuser01","email" : "some.email@gmail.com","status" : "OK","firstname" : "Filan","lastname" : "Ovni","defaultaddressid" : "idofaddress01",}
enter code here
序列化AddressInformation时: {
"id" : "idofaddress01","address" : "R.8. adn","details" : "blah blah","userid" : "idofuser01",}
我试过@JsonManageReference& @JsonBackReference没有成功.如你所见,我也试过@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,property =“id”) 解决方法刚刚找到了使用Jackson 2.1的方法.使用(这将仅选择AddressInformation的id属性)注释对象引用: @JsonProperty(value = "defaultaddressid")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,property = "id")
@JsonIdentityReference(alwaysAsId = true)
public AddressInformation getDefaultAddress() {
return defaultAddress;
}
序列化工作得很好. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
