JsonValueMapValue Sling Models Injector

Available since version 4.0.0


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.


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 {

    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;