{"record":{"id":"4a6d2a93b18035a9","repo":"json-path/JsonPath","slug":"can-not-map-a-src-getclass-to-long-c","errorCode":null,"errorMessage":"can not map a \" + src.getClass() + \" to \" + Long.class.getName()","messagePattern":"can not map a \" \\+ src\\.getClass\\(\\) \\+ \" to \" \\+ Long\\.class\\.getName\\(\\)","errorType":"exception","errorClass":"MappingException","httpStatus":null,"severity":"error","filePath":"json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JsonSmartMappingProvider.java","lineNumber":153,"sourceCode":"        }\n        public Long convert(Object src) {\n            if(src == null){\n                return null;\n            }\n            if(Long.class.isAssignableFrom(src.getClass())){\n                return (Long) src;\n            } else if (Integer.class.isAssignableFrom(src.getClass())) {\n                return ((Integer) src).longValue();\n            } else if (Double.class.isAssignableFrom(src.getClass())) {\n                return ((Double) src).longValue();\n            } else if (BigDecimal.class.isAssignableFrom(src.getClass())) {\n                return ((BigDecimal) src).longValue();\n            } else if (Float.class.isAssignableFrom(src.getClass())) {\n                return ((Float) src).longValue();\n            } else if (String.class.isAssignableFrom(src.getClass())) {\n                return Long.valueOf(src.toString());\n            }\n            throw new MappingException(\"can not map a \" + src.getClass() + \" to \" + Long.class.getName());\n        }\n    }\n\n    private static class DoubleReader extends JsonReaderI<Double> {\n        public DoubleReader() {\n            super(null);\n        }\n        public Double convert(Object src) {\n            if(src == null){\n                return null;\n            }\n            if(Double.class.isAssignableFrom(src.getClass())){\n                return (Double) src;\n            } else if (Integer.class.isAssignableFrom(src.getClass())) {\n                return ((Integer) src).doubleValue();\n            } else if (Long.class.isAssignableFrom(src.getClass())) {\n                return ((Long) src).doubleValue();\n            } else if (BigDecimal.class.isAssignableFrom(src.getClass())) {","sourceCodeStart":135,"sourceCodeEnd":171,"githubUrl":"https://github.com/json-path/JsonPath/blob/62a4c9f0f65ba3f625aa0867d64c528ba72d09ec/json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JsonSmartMappingProvider.java#L135-L171","documentation":"JsonSmartMappingProvider's LongReader.convert() cannot convert the source object to a java.lang.Long. It supports Long, Integer, Short, Byte, Double, BigDecimal, Float and String sources; any other runtime type (containers, booleans, dates, arbitrary beans) is rejected with MappingException. The provider deliberately maps only well-known scalar types.","triggerScenarios":"Calling map(obj, Long.class, configuration) on the JsonSmart mapping provider where obj's runtime class is not a numeric type or String — e.g. obj is a JSONObject, JSONArray, Boolean or Date.","commonSituations":"Mapping a JSON node that is actually an object/array to Long; mapping boolean fields to numeric IDs; migrating code from a provider (Jackson/Gson) that coerced more types; timestamp fields that arrived as strings with non-numeric content.","solutions":["Confirm the source resolves to a number or numeric String before requesting Long.class.","Narrow the JsonPath so it selects a scalar leaf value rather than a container node.","Pre-convert: read as Object, check instanceof Number / parse the String yourself.","Use JacksonMappingProvider or GsonMappingProvider if you need richer type coercion.","Register a custom MappingProvider implementation for your types."],"exampleFix":"// before\nLong id = cfg.mappingProvider().map(node, Long.class, cfg); // node is a JSONObject\n// after\nObject v = JsonPath.read(json, \"$.id\");\nLong id = Long.valueOf(v.toString());","handlingStrategy":"type-guard","validationCode":"Object v = JsonPath.read(json, \"$.field\");\nif (!(v instanceof Number || v instanceof String))\n    throw new IllegalArgumentException(\"Cannot map \" + (v == null ? \"null\" : v.getClass()) + \" to Long\");","typeGuard":"static Long toLong(Object v) {\n    if (v instanceof Number) return ((Number) v).longValue();\n    if (v instanceof String) return Long.valueOf((String) v);\n    return null;\n}","tryCatchPattern":"try {\n    Long n = cfg.mappingProvider().map(value, Long.class, cfg);\n} catch (MappingException e) {\n    Long n = toLong(value);\n    if (n == null) throw new IllegalArgumentException(\"Non-numeric value\", e);\n}","preventionTips":["Confirm the JSON field is a number or numeric string before requesting Long.class.","Avoid mapping boolean/date/container nodes to numeric types.","Unit-test path expressions against real payloads so container nodes are caught early.","Convert epoch timestamps with new Date(long) instead of expecting Date/Long coercion."],"tags":["json-path","mapping","type-conversion","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"}