Java Jackson选择了错误的类进行反序列化
我正在尝试反序列化一个JSON对象,如下所示:Java Jackson选择了错误的类进行反序列化,java,json,jackson,Java,Json,Jackson,我正在尝试反序列化一个JSON对象,如下所示: {"payload":"cGF5bG9hZA==", "verifier":{"id":"00000000-0000-0001-0000-000000000002", "accountId":"00000000-0000-0003-0000-000000000004"}} @Data @NoArgsConstructor @AllArgsConstructor class VerifiedPayload<Veri
{"payload":"cGF5bG9hZA==",
"verifier":{"id":"00000000-0000-0001-0000-000000000002",
"accountId":"00000000-0000-0003-0000-000000000004"}}
@Data
@NoArgsConstructor
@AllArgsConstructor
class VerifiedPayload<VerifierType extends JSONable> implements JSONable {
private byte[] payload;
private VerifierType verifier;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Verifier implements JSONable {
private UUID id;
private UUID accountId;
}
通过此电话:
VerifiedPayload<VerifierType> verifiedPayload = new ObjectMapper().readValue(jsonVerifiedPayload, new TypeReference<VerifiedPayload<VerifierType>>() {});
VerifiedPayload
如下所示:
{"payload":"cGF5bG9hZA==",
"verifier":{"id":"00000000-0000-0001-0000-000000000002",
"accountId":"00000000-0000-0003-0000-000000000004"}}
@Data
@NoArgsConstructor
@AllArgsConstructor
class VerifiedPayload<VerifierType extends JSONable> implements JSONable {
private byte[] payload;
private VerifierType verifier;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Verifier implements JSONable {
private UUID id;
private UUID accountId;
}
它似乎试图构造一个JSONable
而不是VerifiedPayload>
我在这里做错了什么?大概在
readValue
的调用站点上,VerifierType
也是一个类型变量,而不是实际的类型(类、接口)。对于类型变量,Jackson提取它们的边界并将其用作反序列化的目标。您的意思是使用验证器
new TypeReference(){}
?@SotiriosDelimanolis:我想我明白你的意思了,但是反序列化时我不想被绑定到验证器上,因为它可能是另一个用作验证器的类。Jackson无法猜到你想要什么。类型擦除可防止类型参数的传播VerifierType
只是一个类型变量。@SotiriosDelimanolis:好的,那么,我如何反序列化已验证的负载呢?大概在readValue
的调用站点上,VerifierType
也是一个类型变量,而不是实际的类型(类、接口)。对于类型变量,Jackson提取它们的边界并将其用作反序列化的目标。您的意思是使用验证器
new TypeReference(){}
?@SotiriosDelimanolis:我想我明白你的意思了,但是反序列化时我不想被绑定到验证器上,因为它可能是另一个用作验证器的类。Jackson无法猜到你想要什么。类型擦除可防止类型参数的传播VerifierType
只是一个类型变量。@SotiriosDelimanolis:好的,但是,我如何反序列化已验证的负载?