{"record":{"id":"b33325cf05a5c681","repo":"json-path/JsonPath","slug":"can-not-map-a-src-getclass-to-date-c","errorCode":null,"errorMessage":"can not map a \" + src.getClass() + \" to \" + Date.class.getName()","messagePattern":"can not map a \" \\+ src\\.getClass\\(\\) \\+ \" to \" \\+ Date\\.class\\.getName\\(\\)","errorType":"exception","errorClass":"MappingException","httpStatus":null,"severity":"error","filePath":"json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JsonSmartMappingProvider.java","lineNumber":246,"sourceCode":"        public DateReader() {\n            super(null);\n        }\n        public Date convert(Object src) {\n            if(src == null){\n                return null;\n            }\n            if(Date.class.isAssignableFrom(src.getClass())){\n                return (Date) src;\n            } else if(Long.class.isAssignableFrom(src.getClass())){\n                return new Date((Long) src);\n            } else if(String.class.isAssignableFrom(src.getClass())){\n                try {\n                    return DateFormat.getInstance().parse(src.toString());\n                } catch (ParseException e) {\n                    throw new MappingException(e);\n                }\n            }\n            throw new MappingException(\"can not map a \" + src.getClass() + \" to \" + Date.class.getName());\n        }\n    }\n    private static class BooleanReader extends JsonReaderI<Boolean> {\n        public BooleanReader() {\n            super(null);\n        }\n        public Boolean convert(Object src) {\n            if(src == null){\n                return null;\n            }\n            if (Boolean.class.isAssignableFrom(src.getClass())) {\n                return (Boolean) src;\n            }\n            throw new MappingException(\"can not map a \" + src.getClass() + \" to \" + Boolean.class.getName());\n        }\n    }\n}\n","sourceCodeStart":228,"sourceCodeEnd":264,"githubUrl":"https://github.com/json-path/JsonPath/blob/62a4c9f0f65ba3f625aa0867d64c528ba72d09ec/json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JsonSmartMappingProvider.java#L228-L264","documentation":"JsonSmartMappingProvider's DateReader.convert() cannot convert the source object to java.util.Date. It only accepts Date instances and Strings, and Strings are parsed with DateFormat.getInstance() (a SHORT locale format); every other runtime type throws MappingException. Note that a String in a non-default format throws MappingException wrapping the ParseException instead.","triggerScenarios":"map(obj, Date.class, configuration) on JsonSmartMappingProvider where obj is a Long timestamp, a JSONObject, JSONArray, or any non-Date/non-String type.","commonSituations":"Trying to map epoch-millis Long values to Date (unsupported); ISO-8601 strings like \"2024-01-15T10:00:00Z\" that DateFormat.getInstance() cannot parse; provider swap from Jackson which binds timestamps differently.","solutions":["Convert timestamps yourself before mapping: new java.util.Date(longValue) for epoch millis.","Pre-format String values to the locale SHORT pattern DateFormat.getInstance() expects, or parse with a dedicated formatter (Instant.parse / SimpleDateFormat).","Check the JsonPath resolves to a Date-compatible scalar, not a container node.","Use JacksonMappingProvider with a configured date deserializer for robust date handling.","Register a custom MappingProvider with your own DateReader."],"exampleFix":"// before\nDate d = cfg.mappingProvider().map(1715000000000L, Date.class, cfg); // MappingException\n// after\nLong ts = JsonPath.read(json, \"$.createdAt\");\nDate d = new java.util.Date(ts);","handlingStrategy":"type-guard","validationCode":"Object v = JsonPath.read(json, \"$.field\");\nif (!(v instanceof java.util.Date || v instanceof String))\n    throw new IllegalArgumentException(\"Cannot map \" + (v == null ? \"null\" : v.getClass()) + \" to Date; pre-convert timestamps yourself\");","typeGuard":"static java.util.Date toDate(Object v) {\n    if (v instanceof java.util.Date) return (java.util.Date) v;\n    if (v instanceof Number) return new java.util.Date(((Number) v).longValue());\n    if (v instanceof String) {\n        try { return java.time.Instant.parse((String) v); }\n        catch (Exception ignored) { }\n    }\n    return null;\n}","tryCatchPattern":"try {\n    Date d = cfg.mappingProvider().map(value, Date.class, cfg);\n} catch (MappingException e) {\n    Date d = toDate(value);\n    if (d == null) throw new IllegalArgumentException(\"Unparseable date value\", e);\n}","preventionTips":["Handle epoch-millis Long values manually with new Date(millis); the provider won't.","Remember DateFormat.getInstance() parses only locale SHORT format — parse ISO-8601 yourself.","Prefer java.time types (Instant/LocalDateTime) parsed explicitly over java.util.Date mapping.","Configure JacksonMappingProvider with a date deserializer for complex date formats."],"tags":["json-path","mapping","date","json-smart"],"backgroundTag":"incompatible-source-type","analyzedSha":"62a4c9f0f65ba3f625aa0867d64c528ba72d09ec","analyzedAt":"2026-09-11T11:36:00.448Z","contentChangedAt":"2026-09-11T11:36:00.448Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}