JsonValueMapValue Sling Models Injector

Available since version 4.0.0

Purpose

Allows for Sling Models to inject a valuemap value (String or String array) that contain(s) valid JSON, to inject a compatible Object or list of Object. The object must correspond to the JSON.

A single string property can be parsed into a valid corresponding POJO.

A string array property can be parsed into a:

  • Collection (List will be used)
  • List
  • Set
  • Array

Containing valid corresponding POJO. Injections are available when adapting either a Resource or SlingHttpServletRequest object.

Example

String singleValue = resource.getValueMap().get("singleValue", String.class);
// equals: {"property1": "somevalue", "property2": "othervalue"}

String multiValue = resource.getValueMap().get("multipleValues", String[].class);
// equals: {"property1": "somevalue", "property2": "othervalue"},
//         {"property1": "anotherValue", "property2": "nothinginteresting"}



//our POJO that represents the JSON 
public class SimpleJsonPojo {
    private String property1;
    private Integer property2;
}


@Model(adaptables = { SlingHttpServletRequest.class, Resource.class })
public class TestModel {

    @JsonValueMapValue
    private SimpleJsonPojo singleValue;
    
    @JsonValueMapValue(name = "multipleValues")
    private List<SimpleJsonPojo> multipleList;
    
    @JsonValueMapValue(name = "multipleValues")
    private Set<SimpleJsonPojo> multipleSet;
           
    @JsonValueMapValue(name = "multipleValues")
    private SimpleJsonPojo[] multipleArray;
    
    public SimpleJsonPojo getSingleValue(){
        return singleValue;
    }

    public Set<SimpleJsonPojo> getMultipleSet() {
        return multipleSet;
    }
    
    public List<SimpleJsonPojo> getMultipleList() {
        return multipleList;
    }
            
    public SimpleJsonPojo[] multipleArray() {
        return multipleArray;
    }
}