2014-05-09 2 views
1

연락처 데이터를 보유하는 클래스가 있습니다. 각각의 클래스에 싸여있다. 최근 래핑 된 클래스가되는 간단한 바이트 []중인 내 사진 설정을 변경했지만 instantitaion 조금 다르며 이제 제대로 serialize/랩되지 않습니다.Jackson이 클래스를 랩핑하지 않습니다.

내 다른 클래스는 "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

String 대신 byte []를 사용하여'Photo '를 생성해야한다고 생각합니다. 나는 틀릴지도 모른다! – Keerthivasan

답변

0

정확히 무엇인지 알아 냈습니다. ContactInfo 클래스에는 encodedData를 가져 오는 간단한 접근 자 함수가있었습니다. (내가 할 수있는 객체 자체를 반환하기 위해 변경 또는 단순히) 무시에 넣어 간단하여

public String getPhoto() { 
    return m_photo.getEncodedPhoto(); 
} 

,

@JsonIgnore 
public String getPhoto() { 
    return m_photo.getEncodedPhoto(); 
} 

는 시리얼 그것에서 읽으려고 멈췄다. 나는 serializer 엔진을 "멤버 변수와 일치하는 것으로 보이는 모든 것을 직렬화"하는 대신 "명시 적 선언"속성으로 설정하는 방법이 있었으면 좋겠다.

관련 문제