Допустим, у меня есть следующие классы:
public class Person {
String name;
Set<Department> departments;
}
public class Department {
String code;
String name;
}
Итак, я хочу написать собственный десериализатор Отдела, чтобы аннотировать поле deparments в классе Person для его использования. Поскольку этот пользовательский десериализатор будет использоваться только для десериализации объектов Department, находящихся внутри объекта Person. Проблема заключается в том, что мой пользовательский десериализатор Department должен иметь DepartmentRepository, который необходимо передать в конструктор десериализатора. Как я могу это сделать? Это возможно? Я не хочу регистрировать десериализатор в сопоставителе объектов, потому что он должен использоваться только тогда, когда десериализованное поле из класса Person десериализовано.
ОБНОВЛЕНИЕ: Что мне нужно, кроме аннотирования поля отделов аннотацией JsonDeserialize с параметром contentUsing = MyCustomDepartmentDeserializer.class, это способ сообщить Джексону, что при создании объекта MyCustomDepartmentDeserializer он должен сделать это, вызвав конструктор, который получает DepartmentRepository. Десериализатор может быть примерно таким:
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!
}
}