Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

POJO to MultiValueMap mapping/binding/conversion in spring 3

I have a POJO I need to format as a MultiValueMap. This MultiValueMap will be used as the request in a POST method using the restTemplate class and will be passed along to my web service as contentType application/x-www-form-urlencoded.

Are there any tools or utilities that will do the POJO -> MultiValueMap conversion for me?

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

After MultiValueMap is converted to contentType: application/x-www-form-urlencoded by calling POST on restTemplate object:

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
like image 926
tia Avatar asked Oct 19 '10 06:10

tia


1 Answers

You can use Jackson objectMapper:

MultiValueMap valueMap = new LinkedMultiValueMap<String, Object>();
Map<String, Object> fieldMap = objectMapper.convertValue(requestObject, new TypeReference<Map<String, Object>>() {});
valueMap.setAll(fieldMap);
like image 141
Кирилл Крылов Avatar answered Sep 24 '22 02:09

Кирилл Крылов