次の質問が乱雑またはそれらは全く答えていないのどちらかであるので、これは重複して質問です:ジャクソンは本当にjsonを汎用タイプにデシリアライズできませんか?
deserializing-a-generic-type-with-jackson
jackson-deserialize-into-runtime-specified-class
jackson-deserialize-using-generic-class
jackson-deserialize-generic-class-variable
私はこのことを願っています最終的には、このことを明確にする答えが見つけられます。
モデルを持つ:
public class AgentResponse<T> {
private T result;
public AgentResponse(T result) {
this.result = result;
}
public T getResult() {
return result;
}
}
JSON入力:
mapper.readValue(out, new TypeReference<AgentResponse<Map<String, Integer>>>() {});
または
JavaType javaType = mapper.getTypeFactory().constructParametricType(AgentResponse.class, Map.class);
mapper.readValue(out, javaType);
:
{"result":{"first-client-id":3,"test-mail-module":3,"third-client-id":3,"second-client-id":3}}
と2は、ジェネリック型をデシリアライズする方法をお勧めします
ジャクソンはジェネリック型Tを扱うことは決してできません。JavaTypeからのマップですが、型の削除によってオブジェクト型のコンストラクタ引数が見つかり、エラーがスローされます。これはジャクソンのバグですか?何か間違っていますか? TypeReferenceまたはJavaTypeの明示的な仕様は何ですか?
com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class com.fg.mail.smtp.AgentResponse<java.util.Map<java.lang.String,java.lang.Integer>>]: can not instantiate from JSON object (need to add/enable type information?)
at [Source: [email protected]; line: 1, column: 2]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:984)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:276)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2064)
あなたもリスト – fge
を郵送ジャクソン、ユーザーにその質問を投稿する必要があり、あなたが本当にしようとすると_all_そのJSONまたはちょうどこのJSONの 'result'メンバー値をデシリアライズしますか? – fge
私は、AgentResponseにJSON入力を逆シリアル化しています。どのように、なぜそれを部分的に非直列化するのか分かりません。それはあなたが私の一日保存し、ちょうど一般的な結果があるので、私は質問を修正 – lisak