2017-05-31 7 views
1

私はJSONレスポンスでスキーマからPOJOを生成し、POJOのクラスをコンパイルしてロードしましたが、JSONレスポンスの非直列化時にはデシリアライズできる実際のクラスはありません。私は取得していますJSONをダイナミックロードされたクラスファイルにデシリアライズ

MyClassLoader classLoader = new MyClassLoader(POJOGeneratorForJSON.class.getClassLoader()); 

Class parentJsonClass = classLoader.loadClass(topLevelclassName, classpathLoc); 

ObjectMapper mapper = new ObjectMapper(); 

byte[] jsonBytes = generator.getBytesFromURL(source); 

if(jsonBytes != null){ 

    Object jsonObj = parentJsonClass.newInstance(); 
    jsonObj = mapper.readValue(jsonBytes, Class.class); 
} 

例外がある:「com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.Class out of START_OBJECT token

私はmapper.readValue()で、私は2番目の引数として実際のクラスを提供する必要があるが、どのように知らないことを知っています。誰かが回避策を教えてくれますか?

答えて

1

readValueの2番目の引数には、読み取るオブジェクトのタイプを定義するClassインスタンスを渡す必要があります。あなたはClassのタイプを渡しているようです。そして、jacksonはのオブジェクトをjsonBytesから逆シリアル化できません。このような何か動作するはずです:

Object jsonObj = mapper.readValue(jsonBytes, parentJsonClass); 

すなわちjsonBytes

+0

からタイプparentJsonClassのオブジェクトを読み取るマノスたくさんのおかげで....働きました! ....私の悪い。しかし、私の最終的な必要性は、ParentJsonClass(私たちはparentJsonClassとしてオブジェクトを持っています)ではなく、ParentJsonClassではなくTypeクラスでメソッドを呼び出すことです。あなたはこれを助けることができますか? – Garry

+0

'class parentJsonClass'を使って' Object jsonObj'をその型にキャストできます。だからメソッド 'foo()'が 'parentJsonClass.cast(jsonObj).foo();'と答えた場合 –

+0

上記の手法を使うと、ParentJsonClassクラスのものではなくObjectレベルのメソッドしか見ることができません。私の問題は、そこのクラスのメソッドを知ることさえできないということです。 – Garry

関連する問題