Java 杰克逊赢了';t包装类

Java 杰克逊赢了';t包装类,java,json,jackson,Java,Json,Jackson,我有一个保存联系人数据的类;包装在各自的类中。我最近将照片设置从一个简单的byte[]更改为一个包装类,但InstantTaion有点不同,现在无法正确序列化/包装 我的其他类正确包装,如“number”:{“log.PhoneNumber”:{“number”:“123-456-7890”},但如果我输入一张新照片(即:新照片(“死牛肉”)),我只会得到“照片”:“死牛肉”。这也会导致反序列化程序出现问题 public class ContactInfo { @JsonPropert

我有一个保存联系人数据的类;包装在各自的类中。我最近将照片设置从一个简单的byte[]更改为一个包装类,但InstantTaion有点不同,现在无法正确序列化/包装

我的其他类正确包装,如
“number”:{“log.PhoneNumber”:{“number”:“123-456-7890”}
,但如果我输入一张新照片(即:
新照片(“死牛肉”)
),我只会得到
“照片”:“死牛肉”
。这也会导致反序列化程序出现问题

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;
        }
    }
}

我做错了什么?

刚刚弄明白是什么。在ContactInfo类中,有一个简单的访问器函数来获取encodedData

public String getPhoto() {
    return m_photo.getEncodedPhoto();
}
通过简单地将其设置为ignore(或者简单地将其更改为返回对象本身,我可能会这样做)


序列化程序停止尝试从中读取。我希望有一种方法可以将序列化程序引擎设置为更“显式声明”的属性,而不是“序列化似乎与成员变量匹配的所有内容。”

我认为您需要使用字节[]而不是字符串来构造
Photo
。也许我错了!
@JsonIgnore
public String getPhoto() {
    return m_photo.getEncodedPhoto();
}