Recently, I was creating integration test following this article. Everything was working out nicely but then I couldn't figure out how to create anything other than a String data type in the JCR. I was specifically trying to create a Date data type. I found a nice document about the sling post servlet and Date properties. This showed the proper format for Date String but all the examples where for HTML forms. I tried formatting the Date Strings accordingly but still only Strings where being saved.

With help from Center of Excellence, he pointed out that I needed to use @TypeHint. After reviewing, I still ran into the issue of only form examples. So I just followed the examples but attempted to apply them toward the Map I was using. It worked!

How to add non-String properties to nodes using Sling Testing Tools


    SimpleDateFormat sdf = 
            new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

    Map<String,Object> propertiesMap = new HashMap<String,Object>() {
        private static final long serialVersionUID = 1L;
        {
            put(JcrConstants.JCR_PRIMARYTYPE, "nt:unstructured");
            put("mk:lastDownload", 
                    sdf.format(lastDownload.getTime()));
            put("mk:lastDownload@TypeHint","Date");
            put("mk:assetType", MK_ASSETTYPE_1);
        }
    };      
    slingClient.createNode(
                damAssetPath,
                propertiesMap
            });

So all we have to do is add the data type name as one property then add another with the @TypeHint and the data type.