2010-10-19 17 views
9

मैं एक POJO मैं एक MultiValueMap के रूप में प्रारूपित करने की आवश्यकता है में मानचित्रण/बाध्यकारी/रूपांतरण MultiValueMap करने के लिए। यह MultiValueMap restTemplate वर्ग का उपयोग कर एक POST पद्धति में अनुरोध के रूप में इस्तेमाल किया जाएगा और contentType आवेदन/x-www फार्म-urlencoded के रूप में मेरे वेब सेवा के साथ पारित हो जाएगा।POJO वसंत 3

वहाँ किसी भी उपकरण या उपयोगिताओं कि POJO करना होगा रहे हैं -> MultiValueMap मेरे लिए रूपांतरण?

नमूना POJO:

public class SampleDto implements Serializable, Idable, Comparable<SampleDto> { 

    private static final long serialVersionUID = 1L; 

    private Integer id; 

    private Boolean active; 

    private String lastName; 

    private List<SurgeonClinicDto> surgeonClinics = new ArrayList<SurgeonClinicDto>(); 
    private List<PromptValueDto> promptValues = new ArrayList<PromptValueDto>(); 

    private Date lastUpdated = new Date(); 

    public SampleDto() { 

    } 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public Boolean getActive() { 
     return active; 
    } 

    public void setActive(Boolean active) { 
     this.active = active; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public Date getLastUpdated() { 
     return lastUpdated; 
    } 

    public void setLastUpdated(Date lastUpdated) { 
     this.lastUpdated = lastUpdated; 
    } 

    public List<SurgeonClinicDto> getSurgeonClinics() { 
     return surgeonClinics; 
    } 

    public void setSurgeonClinics(List<SurgeonClinicDto> surgeonClinics) { 
     this.surgeonClinics = surgeonClinics; 
    } 

    public List<PromptValueDto> getPromptValues() { 
     return promptValues; 
    } 

    public void setPromptValues(List<PromptValueDto> promptValues) { 
     this.promptValues = promptValues; 
    } 

    public int compareTo(SampleDto o) { 

     if (getLastName() != null && o.getLastName() != null 
       && getLastName().compareTo(o.getLastName()) != 0) { 
      return getLastName().compareTo(o.getLastName()); 
     } 
     if (getActive() != null && o.getActive() != null 
       && getActive().compareTo(o.getActive()) != 0) { 
      return getActive().compareTo(o.getActive()); 
     } 
     if (getLastUpdated() != null && o.getLastUpdated() != null 
       && getLastUpdated().compareTo(o.getLastUpdated()) != 0) { 
      return getLastUpdated().compareTo(o.getLastUpdated()); 
     } 
     if (getId() != null && o.getId() != null 
       && getId().compareTo(o.getId()) != 0) { 
      return getId().compareTo(o.getId()); 
     } 

     return 0; 
    } 
} 

बाद MultiValueMap contentType में बदल जाती है: आवेदन/restTemplate वस्तु पर पोस्ट को फोन करके एक्स www फार्म-urlencoded:

id=11752&active=true&lastName=Brownie& 
promptValues[0].id=12&promptValues[0].miscPromptId=882&promptValues[0].value=meFirst& 
promptValues[1].id=13&promptValues[1].miscPromptId=881&promptValues[1].value=youToo& 
surgeonClinics[0].address1=newAddress&surgeonClinics[0].address2=newAddress2&surgeonClinics[0].city=clinic City& 
surgeonClinics[0][email protected]&surgeonClinics[0].fax=123.456.7890&surgeonClinics[0].id=33273& 
surgeonClinics[0].name=clinic name&surgeonClinics[0].phone=890-098-4567& 
surgeonClinics[0].zip=34567&surgeonClinics[0].surgeryCenter1=MySurgeryCenter1& 
surgeonClinics[0].surgeryCenter2=MySurgeryCenter2& 
surgeonClinics[1].address1=newAddress11&surgeonClinics[1].address2=newAddress22&surgeonClinics[1].city=clinic2 City& 
surgeonClinics[1][email protected]&surgeonClinics[1].fax=123.456.7890&surgeonClinics[1].id=33274& 
surgeonClinics[1].name=clinic2 name&surgeonClinics[1].phone=890-098-4567& 
surgeonClinics[1].zip=34567& 
surgeonClinics[1].surgeryCenter1=MySurgeryCenter21&surgeonClinics[1].surgeryCenter2=MySurgeryCenter22 
+1

pojo और मानचित्र जो आप उम्मीद करते हैं दिखाएं। – Bozho

+1

ने प्रश्न प्रदर्शित करने के लिए कुछ कोड नमूने जोड़े। – tia

+0

आपने पहले से ही इस प्रश्न से पूछा है: http://stackoverflow.com/questions/3928163/spring-resttemplate-post-parameters-from-complex-object – skaffman

उत्तर

0

आप इस प्रतिबिंब के साथ कर सकते और/या आत्मनिरीक्षण (मुझे सही नाम कभी याद नहीं है)। यह सीरियलाइजेशन की एक भिन्नता है, इसलिए आप सीरियलाइजेशन कार्यान्वयन में देखना चाहेंगे।

एक अन्य विकल्प एक अंतरफलक इस

 

putlic interface ToMap 
{ 
    Map<String, String> toMap(); 
} 

के लिए इसी तरह बना सकते हैं और प्रश्न में कक्षाओं पर इसे लागू करने के लिए है।

अपने POJO के लिए

यह इस प्रकार दिखाई देंगे:

 

Map<String, String> toMap() 
{ 
    int index; 
    StringBuilder key = new StringBuidler(); 
    Map<String, String> returnValue = new HashMap<String, String>(); 

    returnValue.put("id", id); 
    returnValue.put("active", active); 
    returnValue.put("lastName", lastName); 

    index = 0; 
    for (SurgeonClinicDto surgeonClinic : surgeonClinics) 
    { 
     key.setLength(0); 
     key.append("surgeonClinic["); 
     key.append(index); 
     key.append("].field1"); 

     returnValue.put(key.toString(), surgeonClinic[index].field1); 

     key.setLength(0); 
     key.append("surgeonClinic["); 
     key.append(index); 
     key.append("].field2"); 

     returnValue.put(key.toString(), surgeonClinic[index].field2); 

     ... more stuff here... 

    } 
    return returnValue; 
} 
 
0

आप प्रारूप है कि आप अपने प्रश्न में निर्दिष्ट किया है में इसे भेजने के लिए देख रहे हैं तो आप DwB क्या सुझाव दिया की तरह कुछ करने के लिए चाहते हो सकता है लेकिन, मैं आप इसे आसान अगर आप एक अधिक वस्तु केंद्रित दृष्टिकोण जैसे JSON का उपयोग परिवर्तित करने के लिए मिल सकता है लगता है, वहाँ पुस्तकालयों के बहुत सारे POJO-> JSON के बीच कन्वर्ट करने के लिए कर रहे हैं। एक अन्य लाभ यह है कि जेएसओएन स्टोर नंबर/स्ट्रिंग/बूलियन को अलग से संभालता है इसलिए पीओजेओ में वापस कनवर्ट करना आसान होता है, जबकि यदि आप अपने उदाहरण के रूप में डेटा भेजते हैं तो आपको सभी स्ट्रिंग ऑब्जेक्ट्स को वापस किस प्रकार के रूप में परिवर्तित करना होगा। आईडी को स्ट्रिंग-> int और सक्रिय रूपांतरित स्ट्रिंग-> बूलियन परिवर्तित करने की आवश्यकता होगी।

तो JSON में यह कुछ इस तरह लग सकता है:

dto = { 
    id : 11752, 
    active : true, 
    lastName : "Brownie", 
    promptValues : [ 
     {id : 12, miscPromptId : 882, value : "meFirst"}, 
     {id : 13, miscPromptId : 881, value : "youToo"} 
    ], 
    surgeonClinics = [{..etc..}] 
} 

जाहिर है आप XML के साथ ऐसा ही कुछ कर सकता है, लेकिन मैं इस सरल समाधान चाहते जब मैं एक पंक्ति में बस और सभी डेटा भेजना चाहते हैं। जेएसओएन पुस्तकालय बेहतर हो रहे हैं और कुछ प्रतिबिंब द्वारा आपके ऑब्जेक्ट से इसे बहुत अधिक उत्पन्न कर सकते हैं।

वैसे भी केवल एक सुझाव।

संबंधित मुद्दे