如何使用jackson将自定义反序列化器添加到接口

说我有一个接口A,我想为所有类实现接口A使用自定义反序列化器,所以我使用下面的代码,但它不起作用,而CustomAserializer工作。 那么我该如何使用我的自定义反序列化器反序列化所有类实现A. 谢谢。

module.addDeserializer(A.class, new CustomADeserializer()); module.addSerializer(A.class, new CustomASerializer()) 

您似乎错过了使用@JsonDeserialize(using = ImplementationClazz.class)来注释您的实现类,以指示用于反序列化抽象类或接口的类。

使用Jackson反序列化具有多个实现的接口的简单示例。

这是我的界面

 @JsonDeserialize(using = UserDeserializer.class) public interface User { } 

接口的一种实现

 @JsonDeserialize(as = ServiceUser.class) public class ServiceUser implements User{ private String name; private String role; //constructor,setters & getters 

第二次实施

 @JsonDeserialize(as = AdminUser.class) public class AdminUser implements User { private String role; private String designation; //constructor,setters & getters 

这是De-serializer

  public class UserDeserializer extends JsonDeserializer { @Override public User deserialize(JsonParser jp, DeserializationContext context) throws IOException { ObjectMapper mapper = (ObjectMapper) jp.getCodec(); ObjectNode root = mapper.readTree(jp); /*write you own condition*/ if (root.has("name") && root.get("name").asText().equals("XYZ")) { return mapper.readValue(root.toString(), ServiceUser.class); } return mapper.readValue(root.toString(), AdminUser.class); } } 

如果您没有注释实现类,则可能会出现Stackoverflow错误。所有实现类都应该自行反序列化,否则它将使用导致StackOverflowError的父类反序列化器。