2012-08-08 2 views
0

POJO를 JSON 문자열로 직렬화하는 방법을 연구 중입니다. 잭슨 라이브러리를 사용하고 있으며 문제가 발생했습니다.클래스 멤버를 JSON 객체로 직렬화하기

json으로 개체의 값 중 하나를 수행 할 수 있습니다 문자열이나 그렇게 같은 문자열 배열 ...이 순간

@JsonIgnore 
private String mimeTypes; 
@JsonIgnore 
private String[] mimeTypesArray; 
@JsonRawValue 
@JsonProperty("integration/enabled-mime-types") 
private String mimeType; 

public void setMimeTypes(String mimeTypes) { 
    this.mimeTypes = mimeTypes; 
    mimeType = mimeTypes; 
} 

public void setMimeTypes(String[] mimeTypes) { 
    this.mimeTypesArray = mimeTypes; 
    try { 
     JSONArray jsonArray = new JSONArray(mimeTypes); 
     this.mimeType = jsonArray.toString(); 
    } catch (JSONException e) { 
     e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 
    } 
} 
에서 나의 접근 방식은

{"mimeTypes":"all"} 

또는

{"mimeTypes":["application/pdf", "application/msword"]} 

입니다 수

기본적으로 문자열 필드, 문자열 배열 필드 및 t에 추가 할 문자열 필드가 있습니다. 그는 json 개체. setter에서 serialize를 수행하므로 오브젝트 매퍼는 사용할 필드를 선택할 필요가 없습니다.

이것은 일을하는 해커 같은 느낌입니다. 더 나은 해결책이있을 것입니까? 나는 jackson 전망을 사용하는 것에 대해 읽고 있었지만 이것이 나의 문제에 대해 가능한지 확실하지 않다.

답변

1

나는 그것을 테스트하지 않은,하지만 난 직렬화되어야 하는지를 계산하기위한 전용 방법을 추가하려고 할 것 :

class MyMimeTypes { 
    @JsonIgnore 
    private String[] mimeTypesArray; 

    /** A convenience method for setting just one item. */ 
    public void setMimeType(String mimeType) { 
     this.mimeTypesArray = new String[] { mimeType }; 
    } 

    public void setMimeTypes(String[] mimeTypes) { 
     this.mimeTypesArray = mimeTypes; 
    } 

    // The JSON-specific part: 

    @JsonProperty("mimeTypes") 
    public Object jsonMimeTypes() { 
     if (mimeTypesArray.length == 1) 
      return mimeTypesArray[0]; 
     else 
      return mimeTypesArray; 
    } 
} 

이 방법을 사용하면, 직렬화 된 배열에 하나 개의 항목이있는 경우 값은 단지 항목 일뿐입니다. 그렇지 않으면 전체 배열이 직렬화됩니다.

이름이 같고 서명이 다른 두 명의 설정자가있는 것은 나쁜 습관입니다. AFAIK는 Java Beans 사양을 위반합니다.

아마도 당신은 두 세터를 대체하기 위해 여기에 가변 인자 방법을 사용할 수 있습니다 (하지만 난이 자바 콩 사양과 함께가는 방법을 모르는) :

public void setMimeTypes(String... mimeTypes) { 
    this.mimeTypesArray = mimeTypes; 
} 
+0

그것은 가변 인자와 함께 잘 작동합니다. 고마워! – jiduvah

+0

나는 방금 변형이 deserialisation과 함께 작동하지 않는다는 것을 깨달았다. – jiduvah

관련 문제