我有一个包含联系人数据的班级;包在相应的班级。我最近将我的照片设置从简单的字节[]改为包装类,但是瞬间变化有点不同,现在不能正确地序列化/包装。
我的其他课程正确包裹,例如"number":{"log.PhoneNumber":{"number":"123-456-7890"}}
,但如果我输入新照片(即:new Photo("DEADBEEF")
),我只会获得"photo":"DEADBEEF"
。这也导致解串器出现问题。
public class ContactInfo {
@JsonProperty("name") private Name m_name = null;
@JsonProperty("number") private PhoneNumber m_number = null;
@JsonProperty("email") private Email m_email = null;
@JsonProperty("photo") private Photo m_photo = null;
@JsonCreator
public ContactInfo(@JsonProperty("name") Name name,
@JsonProperty("number") PhoneNumber number,
@JsonProperty("email") Email email,
@JsonProperty("photo") Photo photo) {
/** Set vars **/
}
@JsonTypeInfo(use=Id.CLASS, include=As.WRAPPER_OBJECT)
static public class Photo {
private byte[] m_decodedBase64 = null;
public Photo(byte[] encodedBase64) {
m_decodedBase64 = Base64.decodeBase64(encodedBase64);
}
@JsonCreator
public Photo(@JsonProperty("photoData")String encodedBase64) {
m_decodedBase64 = Base64.decodeBase64(encodedBase64);
}
@JsonProperty("photoData")
public String getEncodedPhoto() {
return Base64.encodeBase64String(m_decodedBase64);
}
public byte[] getDecodedData() {
return m_decodedBase64;
}
}
}
我做错了什么?
答案 0 :(得分:0)
只是想出它是什么。在ContactInfo类中,有一个简单的访问器函数来获取encodedData。
public String getPhoto() {
return m_photo.getEncodedPhoto();
}
简单地将其置于忽略状态(或者只是将其更改为返回对象本身,我可能会这样做),
@JsonIgnore
public String getPhoto() {
return m_photo.getEncodedPhoto();
}
序列化程序停止尝试从中读取。我希望有一种方法可以将序列化器引擎设置为属性的“显式声明”,而不是“序列化似乎与成员变量匹配的所有内容。”