Est-il possible d'avoir un Jackson personnalisé deserializer avec les non-constructeur par défaut?

Permet de dire que j'ai les classes suivantes:

public class Person {

    String name;
    Set<Department> departments;

}

public class Department {

    String code;
    String name;

}

Si je veux écrire un personnalisé du Département deserializer afin d'annoter le deparments de terrain en la Personne de la classe à utiliser. Parce que cette coutume deserializer ne sera utilisée que pour désérialiser Département des objets qui sont à l'intérieur d'un objet Personne. Le problème est que ma personnalisé Département deserializer aurez besoin d'avoir un DepartmentRepository qui doit être passé dans les deserializer du constructeur. Comment puis-je faire cela? Est-ce possible? Je ne veux pas enregistrer le deserializer dans l'objet mappeur, car il doit être utilisé uniquement lorsque le deparatments champ à partir de la classe de Personne obtient désérialisé.

Mise à JOUR: Ce dont j'ai besoin, en plus d'annoter les départements de terrain avec JsonDeserialize annotation avec le paramètre contentUsing = MyCustomDepartmentDeserializer.class, est une façon de dire Jackson que lorsqu'il crée un MyCustomDepartmentDeserializer objet, il doit le faire en appelant un constructeur qui reçoit un DepartmentRepository. Le deserializer peut être quelque chose comme ceci:

public class MyCustomDepartmentDeserializer extends JsonDeserializer<Department> {

    private final DepartmentRepository departmentRepository;

    public MyCustomDepartmentDeserializer(DepartmentRepository departmentRepository) {
        this.departmentRepository = departmentRepository;
    }

    @Override
    public Department deserialize(JsonParser jp, DeserializationContext ctxt)
    throws IOException, JsonProcessingException {
        //IMPLEMENTATION!
    }

}
InformationsquelleAutor GuidoMB | 2011-10-15