{"record":{"id":"15491073d8905f16","repo":"json-path/JsonPath","slug":"json-smart-provider-does-not-support-typeref-use","errorCode":null,"errorMessage":"Json-smart provider does not support TypeRef! Use a Jackson or Gson based provider","messagePattern":"Json-smart provider does not support TypeRef! Use a Jackson or Gson based provider","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JsonSmartMappingProvider.java","lineNumber":94,"sourceCode":"        }\n        if (targetType.isAssignableFrom(source.getClass())) {\n            return (T) source;\n        }\n        try {\n            if(!configuration.jsonProvider().isMap(source) && !configuration.jsonProvider().isArray(source)){\n                return factory.call().getMapper(targetType).convert(source);\n            }\n            String s = configuration.jsonProvider().toJson(source);\n            return (T) JSONValue.parse(s, targetType);\n        } catch (Exception e) {\n            throw new MappingException(e);\n        }\n\n    }\n\n    @Override\n    public <T> T map(Object source, TypeRef<T> targetType, Configuration configuration) {\n        throw new UnsupportedOperationException(\"Json-smart provider does not support TypeRef! Use a Jackson or Gson based provider\");\n    }\n\n    private static class StringReader extends JsonReaderI<String> {\n        public StringReader() {\n            super(null);\n        }\n        public String convert(Object src) {\n            if(src == null){\n                return null;\n            }\n            return src.toString();\n        }\n    }\n    private static class IntegerReader extends JsonReaderI<Integer> {\n        public IntegerReader() {\n            super(null);\n        }\n        public Integer convert(Object src) {","sourceCodeStart":76,"sourceCodeEnd":112,"githubUrl":"https://github.com/json-path/JsonPath/blob/62a4c9f0f65ba3f625aa0867d64c528ba72d09ec/json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JsonSmartMappingProvider.java#L76-L112","documentation":"JsonSmartMappingProvider cannot perform generic TypeRef-based conversions; its map(Object, TypeRef<T>, Configuration) implementation always throws UnsupportedOperationException. Generic databind needs Jackson or Gson, as the message states.","triggerScenarios":"Calling read(path, TypeRef<T>) (e.g. new TypeRef<Map<String,Object>>(){}) while the configuration's mapping provider is JsonSmartMappingProvider (json-smart based, including net.minidev defaults).","commonSituations":"Relying on JsonSmart defaults (it's a common default provider in json-path) and then requesting typed reads; migrating code from a Jackson-configured project to one configured with json-smart; frameworks that set the smart provider via ServiceLoader discovery.","solutions":["Configure JacksonMappingProvider or GsonMappingProvider: Configuration.builder().mappingProvider(new JacksonMappingProvider()).build()","Replace the TypeRef read with a plain class read or manual conversion from JSONObject/JSONArray","Pass an explicit Configuration via JsonPath.using(config) instead of relying on defaults"],"exampleFix":"// before\nList<MyDto> list = JsonPath.parse(json).read(\"$[*]\", new TypeRef<List<MyDto>>(){}); // JsonSmart\n// after\nConfiguration cfg = Configuration.builder()\n    .mappingProvider(new GsonMappingProvider()).build();\nList<MyDto> list = JsonPath.using(cfg).parse(json).read(\"$[*]\", new TypeRef<List<MyDto>>(){});","handlingStrategy":"try-catch","validationCode":"// verify TypeRef capability before typed reads\nif (config.getMappingProvider() instanceof JsonSmartMappingProvider) {\n    throw new IllegalStateException(\"Use Jackson/Gson mapping provider for TypeRef reads\");\n}","typeGuard":"boolean supportsTypeRef(Configuration cfg) {\n    return !(cfg.getMappingProvider() instanceof JsonSmartMappingProvider);\n}","tryCatchPattern":"try {\n    T v = JsonPath.using(config).parse(json).read(path, new TypeRef<T>(){});\n} catch (UnsupportedOperationException e) {\n    // JsonSmart cannot databind: reconfigure to Jackson/Gson or use Class-based read\n}","preventionTips":["Explicitly set a Jackson/Gson mapping provider in Configuration when using TypeRef","Pass Configuration via JsonPath.using(config) instead of relying on json-smart defaults","Audit ServiceLoader/META-INF registrations that silently select JsonSmartMappingProvider"],"tags":["json-path","unsupported-operation","typeref","json-smart"],"backgroundTag":"unsupported-operation","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"}